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

Reply via email to