OPCUA-Open62541

 view release on metacpan or  search on metacpan

Open62541.xs  view on Meta::CPAN

    PREINIT:
	UA_UsernamePasswordLogin *		loginList;
	size_t					loginSize;
	UA_UsernamePasswordLoginCallback	callback;
	void *					context;
    CODE:
	/* Use fallback like UA_ServerConfig_setDefaultWithSecurityPolicies */
	if (optUserTokenPolicyUri == NULL &&
	    config->svc_serverconfig->securityPoliciesSize > 0) {
		optUserTokenPolicyUri =
		    &config->svc_serverconfig->securityPolicies
		    [config->svc_serverconfig->securityPoliciesSize - 1].
		    policyUri;
	}
	if (optVerifyX509 && optUserTokenPolicyUri == NULL)
		CROAK("VerifyX509 needs userTokenPolicyUri");
	unpack_UA_UsernamePasswordLogin_List(&loginList, &loginSize,
	    usernamePasswordLogin);
	if (loginSize > 0 && optUserTokenPolicyUri == NULL)
		CROAK("UsernamePasswordLogin needs userTokenPolicyUri");
	if (!SvOK(loginCallback)) {
		callback = NULL;
		context = NULL;
	} else if (SvROK(loginCallback) &&
	    SvTYPE(SvRV(loginCallback)) == SVt_PVCV) {
		(void)loginContext;
		CROAK("Perl callback not implemented");
#ifdef HAVE_CRYPT_CHECKPASS
	} else if (strcmp(SvPV_nolen(loginCallback), "crypt_checkpass") == 0) {
		callback = loginCryptCheckpassCallback;
		context = NULL;
#endif /* HAVE_CRYPT_CHECKPASS */
	} else {
		CROAK("Callback '%s' is not CODE reference and unknown check",
		    SvPV_nolen(loginCallback));
	}
#ifdef HAVE_UA_ACCESSCONTROL_DEFAULT_VERIFYX509
	RETVAL = UA_AccessControl_defaultWithLoginCallback(
	    config->svc_serverconfig, allowAnonymous, optVerifyX509,
	    optUserTokenPolicyUri, loginSize, loginList, callback, context);
#else
	RETVAL = UA_AccessControl_defaultWithLoginCallback(
	    config->svc_serverconfig, allowAnonymous,
	    optUserTokenPolicyUri, loginSize, loginList, callback, context);
#endif /* HAVE_UA_ACCESSCONTROL_DEFAULT_VERIFYX509 */
    OUTPUT:
	RETVAL

#endif /* HAVE_UA_ACCESSCONTROL_DEFAULTWITHLOGINCALLBACK */

#ifdef HAVE_CRYPT_CHECKPASS

SV *
UA_ServerConfig_AccessControl_CryptNewhash(config, password, \
    pref = &PL_sv_undef)
	OPCUA_Open62541_ServerConfig	config
	SV *				password
	SV *				pref
    PREINIT:
	const char *passstr;
	const char *prefstr = NULL;
	char hash[_PASSWORD_LEN + 1];
    CODE:
	(void)config;
	if (!SvOK(password))
		CROAK("Undef password");
	passstr = SvPV_nolen(password);
	if (SvOK(pref))
		prefstr = SvPV_nolen(pref);
	if (crypt_newhash(passstr, prefstr, hash, _PASSWORD_LEN) != 0)
		CROAKE("crypt_newhash");
	RETVAL = newSVpv(hash, 0);
    OUTPUT:
	RETVAL

#endif /* HAVE_CRYPT_CHECKPASS */

#ifdef HAVE_UA_SERVERCONFIG_CUSTOMHOSTNAME

SV *
UA_ServerConfig_getCustomHostname(config)
	OPCUA_Open62541_ServerConfig	config
    CODE:
	RETVAL = sv_2mortal(newSV(0));
	pack_UA_String(RETVAL, &config->svc_serverconfig->customHostname);
	SvREFCNT_inc_NN(RETVAL);
    OUTPUT:
	RETVAL

void
UA_ServerConfig_setCustomHostname(config, customHostname)
	OPCUA_Open62541_ServerConfig	config
	SV *				customHostname
    CODE:
	UA_String_clear(&config->svc_serverconfig->customHostname);
	unpack_UA_String(&config->svc_serverconfig->customHostname,
	    customHostname);

#endif /* HAVE_UA_SERVERCONFIG_CUSTOMHOSTNAME */

#ifdef HAVE_UA_SERVERCONFIG_SERVERURLS

void
UA_ServerConfig_setServerUrls(config, ...)
	OPCUA_Open62541_ServerConfig	config
    PREINIT:
	int i;
    CODE:
	UA_Array_delete(config->svc_serverconfig->serverUrls,
	    config->svc_serverconfig->serverUrlsSize,
	    &UA_TYPES[UA_TYPES_STRING]);
	config->svc_serverconfig->serverUrls = NULL;
	config->svc_serverconfig->serverUrlsSize = 0;
	if (items <= 1)
		XSRETURN_EMPTY;
	config->svc_serverconfig->serverUrls = UA_Array_new(items - 1,
	    &UA_TYPES[UA_TYPES_STRING]);
	if (config->svc_serverconfig->serverUrls == NULL)
		CROAKE("UA_Array_new size %d", items - 1);
	config->svc_serverconfig->serverUrlsSize = items - 1;
	for (i = 1; i < items; i++) {
		config->svc_serverconfig->serverUrls[i - 1] =
		    XS_unpack_UA_String(ST(i));
	}

#endif /* HAVE_UA_SERVERCONFIG_SERVERURLS */

void
UA_ServerConfig_setEndpointDescriptions(config, endpointsSV)
	OPCUA_Open62541_ServerConfig	config



( run in 2.068 seconds using v1.01-cache-2.11-cpan-a5162978ef8 )