static int send_keep_alive(belle_sip_channel_t* obj) { /*keep alive*/ const char* crlfcrlf = "\r\n\r\n"; int size=strlen(crlfcrlf); int err=belle_sip_channel_send(obj,crlfcrlf,size); if (err<=0 && !belle_sip_error_code_is_would_block(-err) && err!=-EINTR){ belle_sip_error("channel [%p]: could not send [%i] bytes of keep alive from [%s://%s:%i] to [%s:%i]" ,obj ,size ,belle_sip_channel_get_transport_name(obj) ,obj->local_ip ,obj->local_port ,obj->peer_name ,obj->peer_port); return -1; }else{ belle_sip_message("channel [%p]: keep alive sent to [%s://%s:%i]" ,obj ,belle_sip_channel_get_transport_name(obj) ,obj->peer_name ,obj->peer_port); return 0; } }
static int send_buffer(belle_sip_channel_t *obj, const char *buffer, size_t size){ int ret=0; char *logbuf=NULL; if (obj->stack->send_error == 0){ ret=belle_sip_channel_send(obj,buffer,size); }else if (obj->stack->send_error<0){ /*for testing purpose only */ ret=obj->stack->send_error; } else { ret=size; /*to silently discard message*/ } if (ret<0){ if (!belle_sip_error_code_is_would_block(-ret)){ belle_sip_error("channel [%p]: could not send [%i] bytes from [%s://%s:%i] to [%s:%i]" ,obj ,(int)size ,belle_sip_channel_get_transport_name(obj) ,obj->local_ip ,obj->local_port ,obj->peer_name ,obj->peer_port); channel_set_state(obj,BELLE_SIP_CHANNEL_ERROR); }/*ewouldblock error has to be handled by caller*/ }else if (size==(size_t)ret){ logbuf=make_logbuf(BELLE_SIP_LOG_MESSAGE, buffer,size); belle_sip_message("channel [%p]: message %s to [%s://%s:%i], size: [%i] bytes\n%s" ,obj ,obj->stack->send_error==0?"sent":"silently discarded" ,belle_sip_channel_get_transport_name(obj) ,obj->peer_name ,obj->peer_port ,ret ,logbuf); }else{ logbuf=make_logbuf(BELLE_SIP_LOG_MESSAGE,buffer,ret); belle_sip_message("channel [%p]: message partly sent to [%s://%s:%i], sent: [%i/%i] bytes:\n%s" ,obj ,belle_sip_channel_get_transport_name(obj) ,obj->peer_name ,obj->peer_port ,ret ,(int)size ,logbuf); } if (logbuf) belle_sip_free(logbuf); return ret; }