[Asterisk-Dev] Getting URL to IAX Client Agent

Jean-Denis Girard jd-girard at esoft.pf
Fri Jun 25 14:06:43 MST 2004


Steven Sokol wrote:
> I'm working on adding URL support to IAX Phone.  It will simply pop the
> default browser with the URL.  The bigger question is: how do you want to go
> about _sending_ the URLs?  Copy/paste/send?
> 
> Click a button that pops up a dialog asking you to enter the URL?
> The dialog box could contain a set of "Speed Dial URLs" for commonly
> transmitted info.  It could also contain a drop-down list for recently sent
> URLs.  Would that work?
> 
> Thanks,
> 
> Steve
> 
> 

Well, here is my current patch to libiaxclient. As you will see, it does 
not support sending an URL from the client, just receiving URL which may 
be sent by * via Dial+URL (or Queue+URL), usefull in call center 
environment.
I don't really know how to best handle sending an URL from the client, 
but copy/paste/send seems ok to me.


Thanks,

-- 
Jean-Denis Girard

====================================================
Essential Software - Ingénierie Informatique
Solutions Linux & Open Source en Polynésie française
----------------------------------------------------
http://www.esoft.pf/
Tél: (689) 54 12 95
====================================================
-------------- next part --------------
diff -Naur iaxclient-20040617/lib/iaxclient.h iaxclient-20040617-JDG/lib/iaxclient.h
--- iaxclient-20040617/lib/iaxclient.h	2004-06-10 14:01:23.000000000 -1000
+++ iaxclient-20040617-JDG/lib/iaxclient.h	2004-06-17 14:40:30.135164832 -1000
@@ -47,6 +47,7 @@
 #define IAXC_EVENT_TEXT			1
 #define IAXC_EVENT_LEVELS		2
 #define IAXC_EVENT_STATE		3
+#define IAXC_EVENT_URL			4	/* URL push via IAX(2) */
 
 #define IAXC_CALL_STATE_FREE 		0
 #define IAXC_CALL_STATE_ACTIVE 		(1<<1)
@@ -62,7 +63,11 @@
 #define IAXC_TEXT_TYPE_FATALERROR	4
 #define IAXC_TEXT_TYPE_IAX		5
 
-
+#define IAXC_URL_URL				1	/* URL received */
+#define IAXC_URL_LDCOMPLETE	2	/* URL loading complete */
+#define IAXC_URL_LINKURL		3	/* URL link request */
+#define IAXC_URL_LINKREJECT	4	/* URL link reject */
+#define IAXC_URL_UNLINK			5	/* URL unlink */
 
 #define IAXC_EVENT_BUFSIZ	256
 struct iaxc_ev_levels {
@@ -85,12 +90,19 @@
 	char local_context[IAXC_EVENT_BUFSIZ];
 };
 
+struct iaxc_ev_url {
+	int callNo;
+	int type;
+	char url[IAXC_EVENT_BUFSIZ];
+};
+
 typedef struct iaxc_event_struct {
 	int type;
 	union {
 		struct iaxc_ev_levels 		levels;
 		struct iaxc_ev_text 		text;
 		struct iaxc_ev_call_state 	call;
+		struct iaxc_ev_url		url;
 	} ev;
 } iaxc_event;
 
diff -Naur iaxclient-20040617/lib/iaxclient_lib.c iaxclient-20040617-JDG/lib/iaxclient_lib.c
--- iaxclient-20040617/lib/iaxclient_lib.c	2004-06-10 14:01:23.000000000 -1000
+++ iaxclient-20040617-JDG/lib/iaxclient_lib.c	2004-06-17 14:40:30.136164680 -1000
@@ -509,6 +509,52 @@
     iaxc_post_event(ev);
 }
 
+/* handle IAX URL events */
+void handle_url_event( struct iax_event *e, int callNo ) {
+	iaxc_event ev;
+
+	if(callNo < 0) return;
+
+	ev.ev.url.callNo = callNo;
+	ev.type = IAXC_EVENT_URL;
+	strcpy( ev.ev.url.url, "" );
+
+	switch( e->subclass ) {
+		case AST_HTML_URL:
+			ev.ev.url.type = IAXC_URL_URL;
+			if( e->datalen ) {
+				if( e->datalen > IAXC_EVENT_BUFSIZ ) {
+					fprintf( stderr, "ERROR: URL too long %d > %d\n", 
+							e->datalen, IAXC_EVENT_BUFSIZ );
+				} else {
+					strncpy( ev.ev.url.url, e->data, e->datalen );
+				}
+			}
+			fprintf( stderr, "URL:%s\n", ev.ev.url.url );
+			break;
+		case AST_HTML_LINKURL:
+			ev.ev.url.type = IAXC_URL_LINKURL;
+			fprintf( stderr, "LINKURL event\n" );
+			break;
+		case AST_HTML_LDCOMPLETE:
+			ev.ev.url.type = IAXC_URL_LDCOMPLETE;
+			fprintf( stderr, "LDCOMPLETE event\n" );
+			break;
+		case AST_HTML_UNLINK:
+			ev.ev.url.type = IAXC_URL_UNLINK;
+			fprintf( stderr, "UNLINK event\n" );
+			break;
+		case AST_HTML_LINKREJECT:
+			ev.ev.url.type = IAXC_URL_LINKREJECT;
+			fprintf( stderr, "LINKREJECT event\n" );
+			break;
+		default:
+			fprintf( stderr, "Unknown URL event %d\n", e->subclass );
+			break;
+	}
+    iaxc_post_event( ev );
+}
+
 void handle_audio_event(struct iax_event *e, int callNo) {
 	int total_consumed = 0;
 	int cur;
@@ -599,6 +645,9 @@
 		case IAX_EVENT_PONG:  /* we got a pong */
 			//fprintf(stderr, "**********GOT A PONG!\n");
 			break;
+		case IAX_EVENT_URL:
+			handle_url_event(e, callNo);
+			break;
 		default:
 			iaxc_usermsg(IAXC_STATUS, "Unknown event: %d for call %d", e->etype, callNo);
 			break;
diff -Naur iaxclient-20040617/lib/libiax2/src/iax.c iaxclient-20040617-JDG/lib/libiax2/src/iax.c
--- iaxclient-20040617/lib/libiax2/src/iax.c	2004-06-17 14:37:02.586716992 -1000
+++ iaxclient-20040617-JDG/lib/libiax2/src/iax.c	2004-06-17 14:40:30.137164528 -1000
@@ -1944,6 +1944,8 @@
 			case AST_HTML_URL:
 				if (!e->etype)
 					e->etype = IAX_EVENT_URL;
+				e->subclass = fh->csub;
+				e->datalen = datalen;
 				if (datalen) {
 					memcpy(e->data, fh->iedata, datalen);
 				}


More information about the asterisk-dev mailing list