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