int StunFormulateChangeRequest(struct ChangeRequest* out_head , uchar pa_opt) { uint MagicCookie = tkGetRandom(); out_head->head.type = htons(0x0001); out_head->head.length = htons(0x0008); out_head->head.transId1 = htonl(MagicCookie); out_head->type = htons(0x0003); out_head->length = htons(0x0004); switch( pa_opt ) { case STUN_CHANGE_BOTH_IP_PORT: out_head->value = htonl(0x6); break; case STUN_CHANGE_IP: out_head->value = htonl(0x4); break; case STUN_CHANGE_PORT: out_head->value = htonl(0x2); break; default: TK_EXCEPTION("STUN option"); } return MagicCookie; }
void SockSSLConnect( struct Sock* out_sock ) { #ifdef TK_CONFIG_SOCK_SSL_ENABLE SSL_CTX* ctx; SSL* ssl; SSL_load_error_strings(); VCK( SSL_library_init() != 1 ,return); ctx = SSL_CTX_new (SSLv3_client_method()); VCK( ctx == NULL ,return); ssl = SSL_new (ctx); VCK( ssl == NULL ,return); VCK( SSL_set_fd ( ssl, out_sock->socket ) != 1 , return); //enable socket SSL VCK( SSL_connect (ssl) != 1 , TK_EXCEPTION("SSLConnect failed or be shutdown"); return); //connect SSL out_sock->ctx = ctx; out_sock->ssl = ssl; #endif }