콘텐츠로 이동
무료 평가 시작

pdcomm_opcua_client_connect

함수

클라이언트를 연결하고 세션(session)을 만듭니다.

int32_t pdcomm_opcua_client_connect(const uint8_t *endpoint, size_t size, const pdcomm_opcua_client_options *options, pdcomm_opcua_handle *out)

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.h>

endpoint의 엔드포인트를 탐색하고, SecurityPolicy와 MessageSecurityMode가 옵션과 같은 엔드포인트를 골라 보안 채널(secure channel)을 열고(OpenSecureChannel) 세션을 만듭니다(CreateSession). 서버 인증서는 trusted_server_der로 검증합니다. 보안 정책이면 클라이언트 인증서도 유효해야 하고, 개인 키와 짝이 맞아야 하며, 애플리케이션 URI를 포함해야 합니다. 세션은 아직 활성화되지 않습니다. 다음으로 pdcomm_opcua_client_activate_anonymous() 또는 pdcomm_opcua_client_activate_user_name()을 호출합니다.

memset(&options, 0, sizeof(options));
options.struct_size = (uint32_t)sizeof(options);
options.version = 1;
status = pdcomm_opcua_client_options_init(&options);
if (status != PDCOMM_OPCUA_OK) { print_error("options", status); goto done; }
options.timeout_ms = timeout;
options.policy = policy;
options.mode = mode;
options.flags = policy == PDCOMM_OPCUA_POLICY_NONE ? PDCOMM_OPCUA_ALLOW_NONE : 0;
options.certificate_der.data = certificate;
options.certificate_der.size = certificate_size;
options.private_key_pem.data = key;
options.private_key_pem.size = key_size;
options.trusted_server_der.data = trust;
options.trusted_server_der.size = trust_size;
status = pdcomm_opcua_client_connect((const uint8_t *)argv[1], strlen(argv[1]), &options, &client);
// The SDK copied the identity; wipe the private key now.
example_wipe(key, key_size);
key = NULL;
if (status != PDCOMM_OPCUA_OK) { print_error("connect", status); goto done; }
status = pdcomm_opcua_client_activate_anonymous(client);

(examples/opcua/opcua_client.c에서 발췌)

매개변수

이름설명
endpointUTF-8로 된 opc.tcp:// URL이며 1~4096바이트입니다.
sizeendpoint의 크기(바이트)입니다.
options초기화한 옵션입니다. 호출 중에만 복사됩니다.
out클라이언트 핸들을 받습니다.

반환값

성공하면 #PDCOMM_OPCUA_OK를 반환합니다. 옵션이 유효하지 않으면(알 수 없는 플래그, 정책 또는 모드, 정책과 모드의 불일치, #PDCOMM_OPCUA_ALLOW_NONE 없는 None, 보안 정책인데 ID 정보가 없음, 파싱할 수 없는 인증서 또는 키) #PDCOMM_OPCUA_INVALID_INPUT을 반환합니다. 엔드포인트가 광고되지 않았거나, 서버 또는 클라이언트 ID가 거부되었거나, 네트워크가 실패하면 #PDCOMM_OPCUA_RUNTIME_ERROR를 반환합니다. 그 밖에 #PDCOMM_OPCUA_LIMIT를 반환할 수 있고, opcua-client 라이선스가 없으면 #PDCOMM_OPCUA_LICENSE_REQUIRED를 반환합니다.

참고

  • 네트워크 교환마다 최대 timeout_ms 동안 블로킹됩니다. 개인 키는 복사되므로 이 호출 뒤에는 호출자의 사본을 지웁니다.