]> andersk Git - libfaim.git/blobdiff - aim_rxhandlers.c
- Fri Jun 2 23:27:28 UTC 2000
[libfaim.git] / aim_rxhandlers.c
index 5b2a1496d1af7d4468fba5a6ecebbbf69fb82e38..7e4fc75de35d20e44fd7a29e4baae58ae0205301 100644 (file)
@@ -372,7 +372,12 @@ int aim_rxdispatch(struct aim_session_t *sess)
       case AIM_CONN_TYPE_BOS: {
        u_short family;
        u_short subtype;
-       
+
+       if (workingPtr->type == 0x04) {
+         workingPtr->handled = aim_negchan_middle(sess, workingPtr);
+         break;
+       }
+
        family = aimutil_get16(workingPtr->data);
        subtype = aimutil_get16(workingPtr->data+2);
        
@@ -683,6 +688,35 @@ int aim_parse_unknown(struct aim_session_t *sess,
 }
 
 
+int aim_negchan_middle(struct aim_session_t *sess,
+                      struct command_rx_struct *command)
+{
+  struct aim_tlvlist_t *tlvlist;
+  char *msg = NULL;
+  unsigned short code = 0;
+  struct aim_tlv_t *tmptlv;
+  rxcallback_t userfunc = NULL;
+  int ret = 1;
+
+  tlvlist = aim_readtlvchain(command->data, command->commandlen);
+
+  if ((tmptlv = aim_gettlv(tlvlist, 0x0009, 1)))
+    code = aimutil_get16(tmptlv->value);
+
+  if ((tmptlv = aim_gettlv(tlvlist, 0x000b, 1)))
+    msg = aim_gettlv_str(tlvlist, 0x000b, 1);
+
+  userfunc = aim_callhandler(command->conn, 
+                            AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR);
+  if (userfunc)
+    ret =  userfunc(sess, command, code, msg);
+
+  aim_freetlvchain(&tlvlist);
+  free(msg);
+
+  return ret;
+}
+
 /*
  * aim_parse_generalerrs()
  *
This page took 0.045315 seconds and 4 git commands to generate.