implement tls and dscp options

This commit is contained in:
Simon Morlat 2013-03-27 16:40:27 +01:00
parent fc7925235e
commit 84dc96eccb
3 changed files with 50 additions and 10 deletions

View file

@ -17,9 +17,14 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include "sal_impl.h" #include "sal_impl.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
static void set_tls_properties(Sal *ctx);
void _belle_sip_log(belle_sip_log_level lev, const char *fmt, va_list args) { void _belle_sip_log(belle_sip_log_level lev, const char *fmt, va_list args) {
int ortp_level; int ortp_level;
switch(lev) { switch(lev) {
@ -384,6 +389,8 @@ Sal * sal_init(){
listener_callbacks.process_auth_requested=process_auth_requested; listener_callbacks.process_auth_requested=process_auth_requested;
sal->listener=belle_sip_listener_create_from_callbacks(&listener_callbacks,sal); sal->listener=belle_sip_listener_create_from_callbacks(&listener_callbacks,sal);
belle_sip_provider_add_sip_listener(sal->prov,sal->listener); belle_sip_provider_add_sip_listener(sal->prov,sal->listener);
sal->tls_verify=TRUE;
sal->tls_verify_cn=TRUE;
return sal; return sal;
} }
void sal_set_user_pointer(Sal *sal, void *user_data){ void sal_set_user_pointer(Sal *sal, void *user_data){
@ -445,6 +452,7 @@ void sal_uninit(Sal* sal){
belle_sip_object_unref(sal->prov); belle_sip_object_unref(sal->prov);
belle_sip_object_unref(sal->stack); belle_sip_object_unref(sal->stack);
belle_sip_object_unref(sal->listener); belle_sip_object_unref(sal->listener);
if (sal->root_ca) ms_free(sal->root_ca);
ms_free(sal); ms_free(sal);
return ; return ;
}; };
@ -458,11 +466,13 @@ int sal_add_listen_port(Sal *ctx, SalAddress* addr){
if (lp) { if (lp) {
belle_sip_listening_point_set_keep_alive(lp,ctx->keep_alive); belle_sip_listening_point_set_keep_alive(lp,ctx->keep_alive);
result = belle_sip_provider_add_listening_point(ctx->prov,lp); result = belle_sip_provider_add_listening_point(ctx->prov,lp);
set_tls_properties(ctx);
} else { } else {
return -1; return -1;
} }
return result; return result;
} }
int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure) { int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure) {
SalAddress* sal_addr = sal_address_new(NULL); SalAddress* sal_addr = sal_address_new(NULL);
int result; int result;
@ -538,16 +548,41 @@ void sal_use_101(Sal *ctx, bool_t use_101){
ms_warning("sal_use_101 is deprecated"); ms_warning("sal_use_101 is deprecated");
return ; return ;
} }
static void set_tls_properties(Sal *ctx){
belle_sip_listening_point_t *lp=belle_sip_provider_get_listening_point(ctx->prov,"TLS");
if (lp){
belle_sip_tls_listening_point_t *tlp=BELLE_SIP_TLS_LISTENING_POINT(lp);
int verify_exceptions=0;
if (!ctx->tls_verify) verify_exceptions=BELLE_SIP_TLS_LISTENING_POINT_BADCERT_ANY_REASON;
else if (!ctx->tls_verify_cn) verify_exceptions=BELLE_SIP_TLS_LISTENING_POINT_BADCERT_CN_MISMATCH;
belle_sip_tls_listening_point_set_root_ca(tlp,ctx->root_ca);
belle_sip_tls_listening_point_set_verify_exceptions(tlp,verify_exceptions);
}
}
void sal_set_root_ca(Sal* ctx, const char* rootCa){ void sal_set_root_ca(Sal* ctx, const char* rootCa){
ms_error("sal_set_root_ca not implemented yet"); if (ctx->root_ca){
ms_free(ctx->root_ca);
ctx->root_ca=NULL;
}
if (rootCa)
ctx->root_ca=ms_strdup(rootCa);
set_tls_properties(ctx);
return ; return ;
} }
void sal_verify_server_certificates(Sal *ctx, bool_t verify){ void sal_verify_server_certificates(Sal *ctx, bool_t verify){
ms_error("sal_verify_server_certificates not implemented yet"); ctx->tls_verify=verify;
set_tls_properties(ctx);
return ; return ;
} }
void sal_verify_server_cn(Sal *ctx, bool_t verify){ void sal_verify_server_cn(Sal *ctx, bool_t verify){
ms_error("sal_verify_server_cn not implemented yet"); ctx->tls_verify_cn=verify;
set_tls_properties(ctx);
return ; return ;
} }
@ -569,21 +604,23 @@ MSList * sal_get_pending_auths(Sal *sal){
/*misc*/ /*misc*/
void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen){ void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen){
strncpy(ip,address_family==AF_INET6 ? "::1" : "127.0.0.1",iplen); strncpy(ip,address_family==AF_INET6 ? "::1" : "127.0.0.1",iplen);
ms_error("Could not find default routable ip address !"); ms_error("sal_get_default_local_ip() is deprecated.");
} }
const char *sal_get_root_ca(Sal* ctx) { const char *sal_get_root_ca(Sal* ctx) {
ms_fatal("sal_get_root_ca not implemented yet"); return ctx->root_ca;
return NULL;
} }
int sal_reset_transports(Sal *ctx){ int sal_reset_transports(Sal *ctx){
ms_message("reseting transport"); ms_message("reseting transports");
belle_sip_provider_clean_channels(ctx->prov); belle_sip_provider_clean_channels(ctx->prov);
return 0; return 0;
} }
void sal_set_dscp(Sal *ctx, int dscp){ void sal_set_dscp(Sal *ctx, int dscp){
ms_warning("sal_set_dscp not implemented"); belle_sip_stack_set_default_dscp(ctx->stack,dscp);
} }
void sal_set_send_error(Sal *sal,int value) { void sal_set_send_error(Sal *sal,int value) {
belle_sip_stack_set_send_error(sal->stack,value); belle_sip_stack_set_send_error(sal->stack,value);
} }

View file

@ -36,9 +36,12 @@ struct Sal{
void *up; /*user pointer*/ void *up; /*user pointer*/
int session_expires; int session_expires;
unsigned int keep_alive; unsigned int keep_alive;
char *root_ca;
bool_t one_matching_codec; bool_t one_matching_codec;
bool_t use_tcp_tls_keep_alive; bool_t use_tcp_tls_keep_alive;
bool_t nat_helper_enabled; bool_t nat_helper_enabled;
bool_t tls_verify;
bool_t tls_verify_cn;
}; };
typedef enum SalOpSate { typedef enum SalOpSate {