[asterisk-commits] marquis: branch group/pinana-publish-1.4 r296531 - in /team/group/pinana-publ...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sun Nov 28 16:06:45 CST 2010


Author: marquis
Date: Sun Nov 28 16:06:41 2010
New Revision: 296531

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=296531
Log:
Backport some minor changes to devicestate.[h|c] in order to make forward porting this easier.  Wrap up most of the initial epa_entry creation.

Modified:
    team/group/pinana-publish-1.4/channels/chan_sip.c
    team/group/pinana-publish-1.4/include/asterisk/devicestate.h
    team/group/pinana-publish-1.4/main/devicestate.c

Modified: team/group/pinana-publish-1.4/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/group/pinana-publish-1.4/channels/chan_sip.c?view=diff&rev=296531&r1=296530&r2=296531
==============================================================================
--- team/group/pinana-publish-1.4/channels/chan_sip.c (original)
+++ team/group/pinana-publish-1.4/channels/chan_sip.c Sun Nov 28 16:06:41 2010
@@ -9926,6 +9926,9 @@
 	/* At this point we have a device state change to publish to one presence server. */
 	if (!found) {
 		char uri[SIPBUFSIZE];
+		char body[SIPBUFSIZE * 2];
+		char dlg_id[20];
+		size_t maxbytes = sizeof(body);
 
 		ast_log(LOG_DEBUG, "*** Creating new publish device for %s\n", sc->dev);
 		snprintf(uri, sizeof(uri), "sip:%s@%s", sc->dev, pres_server->domain);
@@ -9937,10 +9940,15 @@
 		ast_copy_string(device->pubname, pres_server->name, sizeof(device->pubname));
 		/* Initiate stuff */
 		ao2_link(pub_dev, device);
-		/* Do stuff here */
 		publish_type = SIP_PUBLISH_INITIAL;
-		device->epa = ast_calloc(1, sizeof(struct sip_epa_entry));
-		ast_copy_string(device->epa->body, "FNULHAKE\nGNURP", sizeof(device->epa->body));
+		if (!(device->epa = ast_calloc(1, sizeof(struct sip_epa_entry)))) {
+			ast_log(LOG_ERROR, "Cannot allocate sip_epa_entry!\n");
+			return -1;
+		}
+		generate_random_string(dlg_id, sizeof(dlg_id));
+		/*Assuming for now that we're sending a full update when we initially create the epa_entry and send the PUBLISH*/
+		presence_build_dialoginfo_xml(body, &maxbytes, 1, ast_devstate_str(sc->state), dlg_id, 1, uri, 0);
+		ast_copy_string(device->epa->body, body, sizeof(device->epa->body));
 		ast_copy_string(device->epa->destination, pres_server->host, sizeof(device->epa->destination));
 		device->epa->publish_type = publish_type;
 		ast_copy_string(device->epa->entity_tag, create_new_etag(), sizeof(device->epa->entity_tag));

Modified: team/group/pinana-publish-1.4/include/asterisk/devicestate.h
URL: http://svnview.digium.com/svn/asterisk/team/group/pinana-publish-1.4/include/asterisk/devicestate.h?view=diff&rev=296531&r1=296530&r2=296531
==============================================================================
--- team/group/pinana-publish-1.4/include/asterisk/devicestate.h (original)
+++ team/group/pinana-publish-1.4/include/asterisk/devicestate.h Sun Nov 28 16:06:41 2010
@@ -46,6 +46,13 @@
 
 /*!  \brief Devicestate provider call back */
 typedef int (*ast_devstate_prov_cb_type)(const char *data);
+
+/*!
+ * \brief Convert device state to text string that is easier to parse
+ *
+ * \param devstate Current device state
+ */
+const char *ast_devstate_str(enum ast_device_state devstate);
 
 /*! \brief Convert device state to text string for output 
  * \param devstate Current device state 

Modified: team/group/pinana-publish-1.4/main/devicestate.c
URL: http://svnview.digium.com/svn/asterisk/team/group/pinana-publish-1.4/main/devicestate.c?view=diff&rev=296531&r1=296530&r2=296531
==============================================================================
--- team/group/pinana-publish-1.4/main/devicestate.c (original)
+++ team/group/pinana-publish-1.4/main/devicestate.c Sun Nov 28 16:06:41 2010
@@ -44,19 +44,17 @@
 #include "asterisk/options.h"
 
 /*! \brief Device state strings for printing */
-static const char *devstatestring[] = {
-	/* 0 AST_DEVICE_PROV_NOT_FOUND */    "Provider not found",    /*!< Provider not found */
-	/* 0 AST_DEVICE_UNKNOWN */    "Unknown",    /*!< Valid, but unknown state */
-	/* 1 AST_DEVICE_NOT_INUSE */  "Not in use", /*!< Not used */
-	/* 2 AST_DEVICE IN USE */     "In use",     /*!< In use */
-	/* 3 AST_DEVICE_BUSY */	      "Busy",       /*!< Busy */
-	/* 4 AST_DEVICE_INVALID */    "Invalid",    /*!< Invalid - not known to Asterisk */
-	/* 5 AST_DEVICE_UNAVAILABLE */"Unavailable",/*!< Unavailable (not registered) */
-	/* 6 AST_DEVICE_RINGING */    "Ringing",    /*!< Ring, ring, ring */
-	/* 7 AST_DEVICE_RINGINUSE */  "Ring+Inuse", /*!< Ring and in use */
-	/* 8 AST_DEVICE_ONHOLD */     "On Hold"     /*!< On Hold */
+static const char * const devstatestring[][2] = {
+	{ /* 0 AST_DEVICE_UNKNOWN */     "Unknown",     "UNKNOWN"     }, /*!< Valid, but unknown state */
+	{ /* 1 AST_DEVICE_NOT_INUSE */   "Not in use",  "NOT_INUSE"   }, /*!< Not used */
+	{ /* 2 AST_DEVICE IN USE */      "In use",      "INUSE"       }, /*!< In use */
+	{ /* 3 AST_DEVICE_BUSY */        "Busy",        "BUSY"        }, /*!< Busy */
+	{ /* 4 AST_DEVICE_INVALID */     "Invalid",     "INVALID"     }, /*!< Invalid - not known to Asterisk */
+	{ /* 5 AST_DEVICE_UNAVAILABLE */ "Unavailable", "UNAVAILABLE" }, /*!< Unavailable (not registered) */
+	{ /* 6 AST_DEVICE_RINGING */     "Ringing",     "RINGING"     }, /*!< Ring, ring, ring */
+	{ /* 7 AST_DEVICE_RINGINUSE */   "Ring+Inuse",  "RINGINUSE"   }, /*!< Ring and in use */
+	{ /* 8 AST_DEVICE_ONHOLD */      "On Hold",      "ONHOLD"      }, /*!< On Hold */
 };
-
 /*! \brief  A device state provider (not a channel) */
 struct devstate_prov {
 	char label[40];
@@ -98,9 +96,14 @@
 /*! \brief Find devicestate as text message for output */
 const char *devstate2str(enum ast_device_state devstate) 
 {
-	return devstatestring[devstate];
-}
-
+	return devstatestring[devstate][0];
+}
+
+/* Parseable */
+const char *ast_devstate_str(enum ast_device_state state)
+{
+        return devstatestring[state][1];
+}
 /*! \brief Find out if device is active in a call or not 
 	\note find channels with the device's name in it
 	This function is only used for channels that does not implement 




More information about the asterisk-commits mailing list