Author: ArcRiley Date: 2009-03-03 23:34:53 -0500 (Tue, 03 Mar 2009) New Revision: 1542
Modified: trunk/concordance/include/concordance.h trunk/concordance/include/concordance.sockets.h trunk/concordance/src/_core/step.c trunk/concordance/src/sockets/Client.c Log: further work on callbacks, added cleanup code, some calling code Modified: trunk/concordance/include/concordance.h =================================================================== --- trunk/concordance/include/concordance.h 2009-03-04 04:34:50 UTC (rev 1541) +++ trunk/concordance/include/concordance.h 2009-03-04 04:34:53 UTC (rev 1542) @@ -61,7 +61,6 @@ typedef struct { gint type; /* type CONCORD_MT_XMLSTART */ PyObject* tree; /* cElementTree.TreeBuilder */ - gpointer data; const XML_Char* name; const XML_Char** atts; } concordMsg_xmlStart; Modified: trunk/concordance/include/concordance.sockets.h =================================================================== --- trunk/concordance/include/concordance.sockets.h 2009-03-04 04:34:50 UTC (rev 1541) +++ trunk/concordance/include/concordance.sockets.h 2009-03-04 04:34:53 UTC (rev 1542) @@ -56,8 +56,8 @@ PyObject* module; /* reference to our own module */ GMainContext* context; /* Concordance's Glib context */ Gsasl* saslCntx; /* Concordance's SASL context */ - GAsyncQueue* queueRecv; /* callback queue input */ - GAsyncQueue* queueSend; /* callback queue output */ + GAsyncQueue* queueCall; /* callback Call queue */ + GAsyncQueue* queueSasl; /* callback queue output for SASL */ GHashTable* domains; /* domain->service lookup */ const gchar* addr; gushort port; @@ -71,6 +71,7 @@ GIOChannel* chan; /* Glib IO channel for this session */ Gsasl_session* sctx; /* gsasl session context */ XML_Parser pars; /* expat parser for this session */ + PyObject* tree; /* treebuilder object */ gchar host[256]; /* verified hostname or NULL */ gchar skey[16]; /* session key (stream id="") */ concordVersion vers; /* XMPP major.minor version */ Modified: trunk/concordance/src/_core/step.c =================================================================== --- trunk/concordance/src/_core/step.c 2009-03-04 04:34:50 UTC (rev 1541) +++ trunk/concordance/src/_core/step.c 2009-03-04 04:34:53 UTC (rev 1542) @@ -203,13 +203,34 @@ void g_free (gpointer mem); */ switch (pmsg->type) { - case CONCORD_MT_XMLSTART : - + case CONCORD_MT_XMLSTART : { /*\ + cdef : \*/ + concordMsg_xmlStart* msg = (concordMsg_xmlStart*) pmsg; + g_free((gpointer) msg->name); + g_strfreev((gchar**) msg->atts); + g_free(msg); break; - case CONCORD_MT_XMLEND : + } + + case CONCORD_MT_XMLEND : { /*\ + cdef : \*/ + concordMsg_xmlEnd* msg = (concordMsg_xmlEnd*) pmsg; + g_free((gpointer) msg->name); + g_free(msg); break; - case CONCORD_MT_XMLCHARDATA : + } + + case CONCORD_MT_XMLCHARDATA : { /*\ + cdef : \*/ + concordMsg_xmlCharData* msg = (concordMsg_xmlCharData*) pmsg; + g_free((gpointer) msg->str); + g_free(msg); break; + } + + default : + g_free(pmsg); + break; } /* return either NULL or None depending on BREAKNULL or break; */ Modified: trunk/concordance/src/sockets/Client.c =================================================================== --- trunk/concordance/src/sockets/Client.c 2009-03-04 04:34:50 UTC (rev 1541) +++ trunk/concordance/src/sockets/Client.c 2009-03-04 04:34:53 UTC (rev 1542) @@ -37,9 +37,9 @@ # Python Callbacks (defaults) # */ static PyObject* - _pySASL(PyObject* s) { /*\ + _pySASL(PyObject* s) { /*\ cdef : \*/ - socketsClient_Object* self = (socketsSocket_Object*) s; + socketsClient_Object* self = (socketsClient_Object*) s; return NULL; } @@ -163,6 +163,9 @@ XML_SetElementHandler(session->pars, _xmlStart, _xmlEnd); XML_SetCharacterDataHandler(session->pars, _xmlCharData); + /* this will be the TreeBuilder object for the session */ + session->tree = NULL; + /* lookup hostname - currently unimplemented */ /* return true so GMainLoop will continue watching this channel */ @@ -683,18 +686,29 @@ /* set the client mode */ session->state = CONCORD_E_CLIENT; - /* check and copy "to" and "from" attributes + /* check and "from" and "to" GString* g_string_assign (GString *string, const gchar *rval); */ + if (!(attr = concordFindAttr(atts, "from"))) + attr = ""; + session->efrom = g_string_assign(session->efrom, attr); if (!(attr = concordFindAttr(atts, "to"))) attr = ""; session->eto = g_string_assign(session->eto, attr); - if (!(attr = concordFindAttr(atts, "from"))) - attr = ""; - session->efrom = g_string_assign(session->efrom, attr); + if (attr[0] == 0) { + concordMsg_xmlStart* pmsg; + pmsg = (concordMsg_xmlStart*) + g_malloc(sizeof(concordMsg_xmlStart)); + pmsg->type = CONCORD_MT_XMLSTART; + pmsg->tree = session->tree; + pmsg->name = g_strdup(name); + pmsg->atts = g_strdupv((gchar**) atts); + g_async_queue_push(self->queueCall, pmsg); + } + /* copy element and attributes to ebuff void g_string_printf (GString *string, _______________________________________________ PySoy-SVN mailing list PySoy-SVN@pysoy.org http://www.pysoy.org/mailman/listinfo/pysoy-svn