diff libfaim/aim_rxhandlers.c @ 331:f3c8d79688db

[gaim-migrate @ 341] GAIM DOES ICQ!!!! CATCHING UP TO EVERYBUDDY! :) committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sat, 03 Jun 2000 07:25:42 +0000
parents 0f14e6d8a51b
children e4c34ca88d9b
line wrap: on
line diff
--- a/libfaim/aim_rxhandlers.c	Sat Jun 03 00:53:28 2000 +0000
+++ b/libfaim/aim_rxhandlers.c	Sat Jun 03 07:25:42 2000 +0000
@@ -375,7 +375,12 @@
       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);
 	
@@ -686,6 +691,35 @@
 }
 
 
+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()
  *