Revision
14894
Author
gmaruzz
Date
2009-09-16 16:28:21 -0500 (Wed, 16 Sep 2009)

Log Message

celliax: beginning to bring SMSs to use standard MESSAGE events

Modified Paths

Diff

Modified: freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c (14893 => 14894)


--- freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c	2009-09-16 21:24:22 UTC (rev 14893)
+++ freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c	2009-09-16 21:28:21 UTC (rev 14894)
@@ -35,6 +35,7 @@
  */
 
 #include "celliax.h"
+#define MDL_CHAT_PROTO "SMS"
 
 #ifdef WIN32
 /***************/
@@ -1604,27 +1605,7 @@
 
 	return 0;
 }
-int sms_incoming(private_t * tech_pvt, char *value)
-{
-	char sms_buf[512];
-	switch_event_t *event;
 
-	DEBUGA_CELLIAX("received SMS >>>%s<<< on interface %s\n", CELLIAX_P_LOG, value, tech_pvt->name);
-
-	switch_snprintf(sms_buf, sizeof(sms_buf), "incoming SMS on %s\n", tech_pvt->name);
-
-	if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_INCOMING_SMS) == SWITCH_STATUS_SUCCESS) {
-		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_info", sms_buf);
-		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "interface_name", tech_pvt->name);
-		switch_event_add_body(event, "%s\n\n", tech_pvt->sms_message);
-		switch_event_fire(&event);
-	}
-
-	return 0;
-}
-
-
-
 int new_inbound_channel(private_t * tech_pvt)
 {
 	switch_core_session_t *session = NULL;
@@ -2204,7 +2185,188 @@
 	return NULL;
 
 }
+#ifdef NOTDEF
+int sms_incoming(private_t * tech_pvt, char *value)
+{
+	char sms_buf[512];
+	switch_event_t *event;
 
+	DEBUGA_CELLIAX("received SMS >>>%s<<< on interface %s\n", CELLIAX_P_LOG, value, tech_pvt->name);
+
+	switch_snprintf(sms_buf, sizeof(sms_buf), "incoming SMS on %s\n", tech_pvt->name);
+
+	if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_INCOMING_SMS) == SWITCH_STATUS_SUCCESS) {
+		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_info", sms_buf);
+		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "interface_name", tech_pvt->name);
+		switch_event_add_body(event, "%s\n\n", tech_pvt->sms_message);
+		switch_event_fire(&event);
+	}
+
+	return 0;
+}
+#endif// NOTDEF
+
+
+
+int sms_incoming(private_t * tech_pvt, char *value)
+{
+	switch_event_t *event;
+	switch_core_session_t *session = NULL;
+	int event_sent_to_esl = 0;
+
+	DEBUGA_CELLIAX("received SMS on interface %s\n", CELLIAX_P_LOG, tech_pvt->name);
+
+	if (!switch_strlen_zero(tech_pvt->session_uuid_str)) {
+		session = switch_core_session_locate(tech_pvt->session_uuid_str);
+	}
+	if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
+		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", MDL_CHAT_PROTO);
+		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", tech_pvt->name);
+		//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hint", tech_pvt->chatmessages[which].from_dispname);
+		//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", tech_pvt->chatmessages[which].from_handle);
+		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", "SIMPLE MESSAGE");
+		//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "chatname", tech_pvt->chatmessages[which].chatname);
+		//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "id", tech_pvt->chatmessages[which].id);
+		switch_event_add_body(event, "%s", tech_pvt->sms_message);
+		if(session){
+			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "true");
+			if (switch_core_session_queue_event(session, &event) != SWITCH_STATUS_SUCCESS) {
+				switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
+				switch_event_fire(&event);
+			}
+		} else { //no session
+			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "false");
+			switch_event_fire(&event);
+			event_sent_to_esl=1;
+		}
+
+	}else{
+		ERRORA("cannot create event on interface %s. WHY?????\n", CELLIAX_P_LOG, tech_pvt->name);
+	}
+
+	if(!event_sent_to_esl){
+
+		if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
+			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", MDL_CHAT_PROTO);
+			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", tech_pvt->name);
+			//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hint", tech_pvt->chatmessages[which].from_dispname);
+			//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", tech_pvt->chatmessages[which].from_handle);
+			switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", "SIMPLE MESSAGE");
+			//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "chatname", tech_pvt->chatmessages[which].chatname);
+			//switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "id", tech_pvt->chatmessages[which].id);
+			switch_event_add_body(event, "%s", tech_pvt->sms_message);
+			if(session){
+				switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "true");
+			} else { //no session
+				switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "false");
+			}
+			switch_event_fire(&event);
+		} else{
+			ERRORA("cannot create event on interface %s. WHY?????\n", CELLIAX_P_LOG, tech_pvt->name);
+		}
+	}
+
+	if(session){
+		switch_core_session_rwunlock(session);
+	}
+	//memset(&tech_pvt->chatmessages[which], '\0', sizeof(&tech_pvt->chatmessages[which]) );
+	memset(tech_pvt->sms_message, '\0', sizeof(tech_pvt->sms_message) );
+	return 0;
+}
+
+
+#ifdef NOTDEF
+SWITCH_STANDARD_API(skypiax_chat_function)
+{
+	char *mycmd = NULL, *argv[10] = { 0 };
+	int argc = 0;
+	private_t *tech_pvt = NULL;
+	//int tried =0;
+	int i;
+	int found = 0;
+	//char skype_msg[1024];
+
+	if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) {
+		argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+	}
+
+	if (!argc) {
+		stream->write_function(stream, "ERROR, usage: %s", CELLIAX_CHAT_SYNTAX);
+		goto end;
+	}
+
+	if (argc < 3) {
+		stream->write_function(stream, "ERROR, usage: %s", CELLIAX_CHAT_SYNTAX);
+		goto end;
+	}
+
+	if (argv[0]) {
+		for (i = 0; !found && i < CELLIAX_MAX_INTERFACES; i++) {
+			/* we've been asked for a normal interface name, or we have not found idle interfaces to serve as the "ANY" interface */
+			if (strlen(globals.CELLIAX_INTERFACES[i].name)
+					&& (strncmp(globals.CELLIAX_INTERFACES[i].name, argv[0], strlen(argv[0])) == 0)) {
+				tech_pvt = &globals.CELLIAX_INTERFACES[i];
+				stream->write_function(stream, "Using interface: globals.CELLIAX_INTERFACES[%d].name=|||%s|||\n", i, globals.CELLIAX_INTERFACES[i].name);
+				found = 1;
+				break;
+			}
+
+		}
+		if (!found) {
+			stream->write_function(stream, "ERROR: A Skypiax interface with name='%s' was not found\n", argv[0]);
+			goto end;
+		} else {
+
+			//chat_send(const char *proto, const char *from, const char *to, const char *subject, const char *body, const char *type, const char *hint);
+			//chat_send(p*roto, const char *from, const char *to, const char *subject, const char *body, const char *type, const char *hint);
+			//chat_send(MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), NULL, hint);
+
+			NOTICA("chat_send(proto=%s, from=%s, to=%s, subject=%s, body=%s, type=NULL, hint=%s)\n", CELLIAX_P_LOG, MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), tech_pvt->name);
+
+			chat_send(MDL_CHAT_PROTO, tech_pvt->skype_user, argv[1], "SIMPLE MESSAGE", switch_str_nil((char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]), NULL, tech_pvt->name);
+
+			//NOTICA("TEXT is: %s\n", CELLIAX_P_LOG, (char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1] );
+			//snprintf(skype_msg, sizeof(skype_msg), "CHAT CREATE %s", argv[1]);
+			//skypiax_signaling_write(tech_pvt, skype_msg);
+			//switch_sleep(100);
+		}
+	} else {
+		stream->write_function(stream, "ERROR, usage: %s", CELLIAX_CHAT_SYNTAX);
+		goto end;
+	}
+
+#ifdef NOTDEF
+
+	found=0;
+
+	while(!found){
+		for(i=0; i<MAX_CHATS; i++){
+			if(!strcmp(tech_pvt->chats[i].dialog_partner, argv[1]) ){
+				snprintf(skype_msg, sizeof(skype_msg), "CHATMESSAGE %s %s", tech_pvt->chats[i].chatname, (char *) &cmd[strlen(argv[0]) + 1 + strlen(argv[1]) + 1]);
+				skypiax_signaling_write(tech_pvt, skype_msg);
+				found=1;
+				break;
+			}
+		}
+		if(found){
+			break;
+		}
+		if(tried > 1000){
+			stream->write_function(stream, "ERROR: no chat with dialog_partner='%s' was found\n", argv[1]);
+			break;
+		}
+		switch_sleep(1000);
+	}
+#endif //NOTDEF
+
+end:
+	switch_safe_free(mycmd);
+
+	return SWITCH_STATUS_SUCCESS;
+}
+#endif// NOTDEF
+
+
 /* For Emacs:
  * Local Variables:
  * mode:c