pdcomm_opcua_discover
함수
서버의 엔드포인트를 읽습니다(GetEndpoints).
int32_t pdcomm_opcua_discover(const uint8_t *endpoint, size_t size, uint32_t timeout_ms, pdcomm_opcua_handle *out)endpoint로 SecurityPolicy None 보안 채널(secure channel)을 열고, 해당 엔드포인트 URL로 GetEndpoints를 보낸 뒤 채널을 닫습니다. 탐색(discovery)은 인증하지 않습니다. 여기서는 어떤 인증서도 검증하지 않으므로, 반환된 서버 인증서는 신뢰하기 전에 검증합니다.
결과는 UA Binary GetEndpointsResponse(인코딩 ID 431)를 담은 소유 버퍼이며, 네임스페이스 0 인코딩 NodeId 접두사(Part 6, 5.2.9)를 포함합니다. 버퍼에는 빈 ResponseHeader와 함께 서버의 EndpointDescription이 들어 있습니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | UTF-8로 된 opc.tcp://host[:port][/path] URL이며 1~4096바이트입니다. 기본 포트는 4840입니다. |
size | endpoint의 크기(바이트)입니다. |
timeout_ms | 각 네트워크 교환의 시간 초과이며 1~300000 ms입니다. |
out | 응답 버퍼 핸들을 받습니다. |
반환값
#PDCOMM_OPCUA_OK, #PDCOMM_OPCUA_INVALID_INPUT, #PDCOMM_OPCUA_LIMIT 중 하나를 반환합니다. URL이 opc.tcp://가 아니거나 네트워크 실패 또는 프로토콜 실패가 발생하면 #PDCOMM_OPCUA_RUNTIME_ERROR를 반환합니다. opcua-client 라이선스가 없으면 #PDCOMM_OPCUA_LICENSE_REQUIRED를 반환합니다.
참고
- 교환마다 최대 시간 초과(timeout)만큼 호출한 스레드를 블로킹합니다.