ctx->callbacks.text_received=(SalOnTextReceived)unimplemented_stub;
if (ctx->callbacks.ping_reply==NULL)
ctx->callbacks.ping_reply=(SalOnPingReply)unimplemented_stub;
- if (ctx->callbacks.message_external_body==NULL)
- ctx->callbacks.message_external_body=(SalOnMessageExternalBodyReceived)unimplemented_stub;
}
int sal_unlisten_ports(Sal *ctx){
static void text_received(Sal *sal, eXosip_event_t *ev){
osip_body_t *body=NULL;
- char *from=NULL,*msg;
+ char *from=NULL,*msg=NULL;
osip_content_type_t* content_type;
osip_uri_param_t* external_body_url;
char unquoted_external_body_url [256];
int external_body_size=0;
+ SalMessage salmsg;
+ char message_id[256]={0};
content_type= osip_message_get_content_type(ev->request);
if (!content_type) {
&& strcmp(content_type->type, "text")==0
&& content_type->subtype
&& strcmp(content_type->subtype, "plain")==0 ) {
- osip_message_get_body(ev->request,0,&body);
- if (body==NULL){
- ms_error("Could not get text message from SIP body");
- return;
- }
- msg=body->body;
- sal->callbacks.text_received(sal,from,msg);
+ osip_message_get_body(ev->request,0,&body);
+ if (body==NULL){
+ ms_error("Could not get text message from SIP body");
+ return;
+ }
+ msg=body->body;
} if (content_type->type
&& strcmp(content_type->type, "message")==0
&& content_type->subtype
,&external_body_url->gvalue[1]
,external_body_size=MIN(strlen(external_body_url->gvalue)-1,sizeof(unquoted_external_body_url)));
unquoted_external_body_url[external_body_size-1]='\0';
- sal->callbacks.message_external_body(sal,from,unquoted_external_body_url);
-
} else {
ms_warning("Unsupported content type [%s/%s]",content_type->type,content_type->subtype);
+ osip_free(from);
+ return;
}
+ snprintf(message_id,sizeof(message_id)-1,"%s%s",ev->request->call_id->number,ev->request->cseq->number);
+
+ salmsg.from=from;
+ salmsg.text=msg;
+ salmsg.url=external_body_size>0 ? unquoted_external_body_url : NULL;
+ salmsg.message_id=message_id;
+ sal->callbacks.text_received(sal,&salmsg);
osip_free(from);
}