diff plugins/icq/tcpchathandle.c @ 1432:4c510ca3563f

[gaim-migrate @ 1442] icqlib 1.1.5 committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sun, 28 Jan 2001 01:52:27 +0000
parents 0a766047b4fd
children 8ed70631ed15
line wrap: on
line diff
--- a/plugins/icq/tcpchathandle.c	Sat Jan 27 11:18:17 2001 +0000
+++ b/plugins/icq/tcpchathandle.c	Sun Jan 28 01:52:27 2001 +0000
@@ -1,9 +1,12 @@
 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /*
-$Id: tcpchathandle.c 1319 2000-12-19 10:08:29Z warmenhoven $
+$Id: tcpchathandle.c 1442 2001-01-28 01:52:27Z warmenhoven $
 $Log$
-Revision 1.2  2000/12/19 10:08:29  warmenhoven
-Yay, new icqlib
+Revision 1.3  2001/01/28 01:52:27  warmenhoven
+icqlib 1.1.5
+
+Revision 1.9  2001/01/17 01:29:17  bills
+Rework chat and file session interfaces; implement socket notifications.
 
 Revision 1.8  2000/07/24 03:10:08  bills
 added support for real nickname during TCP transactions like file and
@@ -57,15 +60,25 @@
   icq_ChatSession *pchat;
   icq_Packet *p2;
 
-  if(plink->icqlink->icq_RequestNotify)
-    (*plink->icqlink->icq_RequestNotify)(plink->icqlink, p->id, ICQ_NOTIFY_ACK, 0, 0);
+  invoke_callback(plink->icqlink, icq_RequestNotify)(plink->icqlink, 
+    p->id, ICQ_NOTIFY_ACK, 0, NULL);
+
   pchatlink=icq_TCPLinkNew(plink->icqlink);
   pchatlink->type=TCP_LINK_CHAT;
   pchatlink->id=p->id;
-  
+
+  /* once the ack packet has been processed, create a new chat session */
   pchat=icq_ChatSessionNew(plink->icqlink);
+
   pchat->id=p->id;
   pchat->remote_uin=plink->remote_uin;
+  pchat->tcplink=pchatlink;
+
+  invoke_callback(plink->icqlink, icq_RequestNotify)(plink->icqlink, p->id,
+    ICQ_NOTIFY_CHATSESSION, sizeof(icq_ChatSession), pchat);
+  invoke_callback(plink->icqlink, icq_RequestNotify)(plink->icqlink, p->id,
+    ICQ_NOTIFY_SUCCESS, 0, NULL);
+
   icq_ChatSessionSetStatus(pchat, CHAT_STATUS_CONNECTING);
   icq_TCPLinkConnect(pchatlink, plink->remote_uin, port);
 
@@ -123,13 +136,15 @@
   }
 }
 
-void icq_TCPChatUpdateFont(icq_TCPLink *plink, const char *font, WORD encoding, DWORD style, DWORD size)
+void icq_TCPChatUpdateFont(icq_ChatSession *psession, const char *font, 
+  WORD encoding, DWORD style, DWORD size)
 {
+  ICQLINK *icqlink = psession->icqlink;
   int packet_len, fontlen;
   char *buffer;
-  if(!plink->icqlink->icq_RequestNotify)
-    return;
-  buffer = malloc(packet_len = (2 + (fontlen = strlen(font) + 1)) + 2 + 1 + (4+1)*2);
+
+  buffer = malloc(packet_len = (2 + (fontlen = strlen(font) + 1)) + 
+    2 + 1 + (4+1)*2);
   buffer[0] = '\x11';
   *((DWORD *)&buffer[1]) = style;
   buffer[5] = '\x12';
@@ -137,26 +152,30 @@
   buffer[10] = '\x10';
   *((WORD *)&buffer[11]) = fontlen;
   strcpy(&buffer[13], font);
+
   icq_RusConv("wk", &buffer[13]);
+
   *((WORD *)&buffer[13 + fontlen]) = encoding;
-  if(plink->icqlink->icq_RequestNotify)
-    (*plink->icqlink->icq_RequestNotify)(plink->icqlink, plink->id, ICQ_NOTIFY_CHATDATA, packet_len, buffer);
+
+  invoke_callback(icqlink, icq_ChatNotify)(psession, CHAT_NOTIFY_DATA,
+    packet_len, buffer);
+
   free(buffer);
 }
 
-void icq_TCPChatUpdateColors(icq_TCPLink *plink, DWORD foreground, DWORD background)
+void icq_TCPChatUpdateColors(icq_ChatSession *psession, DWORD foreground, 
+  DWORD background)
 {
+  ICQLINK *icqlink = psession->icqlink;
   char buffer[10];
 
-  if(!plink->icqlink->icq_RequestNotify)
-    return;  
   buffer[0] = '\x00';
   *((DWORD *)&buffer[1]) = foreground;
   buffer[5] = '\x01';
   *((DWORD *)&buffer[6]) = background;
-  if(plink->icqlink->icq_RequestNotify)
-    (*plink->icqlink->icq_RequestNotify)(plink->icqlink, plink->id, ICQ_NOTIFY_CHATDATA,
-                                         sizeof(buffer), buffer);
+
+  invoke_callback(icqlink, icq_ChatNotify)(psession, 
+    CHAT_NOTIFY_DATA, sizeof(buffer), buffer);
 }
 
 void icq_TCPProcessChatPacket(icq_Packet *p, icq_TCPLink *plink)
@@ -204,7 +223,7 @@
       encoding = icq_PacketRead16(p);
     }
     if(font)
-      icq_TCPChatUpdateFont(plink, font, encoding, fontstyle, fontsize);
+      icq_TCPChatUpdateFont(pchat, font, encoding, fontstyle, fontsize);
     icq_ChatSessionSetStatus(pchat, CHAT_STATUS_READY);
     plink->mode|=TCP_LINK_MODE_RAW;
   }
@@ -216,7 +235,7 @@
       icq_PacketRead16(p); /* Unknown */;
       fg = icq_PacketRead32(p);
       bg = icq_PacketRead32(p);
-      icq_TCPChatUpdateColors(plink, fg, bg);
+      icq_TCPChatUpdateColors(pchat, fg, bg);
 
       presponse=icq_TCPCreateChatInfo2Packet(plink, plink->icqlink->icq_Nick,
         0x00ffffff, 0x00000000);
@@ -229,7 +248,7 @@
       user = icq_PacketReadString(p);
       fg = icq_PacketRead32(p);
       bg = icq_PacketRead32(p);
-      icq_TCPChatUpdateColors(plink, fg, bg);
+      icq_TCPChatUpdateColors(pchat, fg, bg);
       font = (char *)NULL;
       encoding = 0;
       fontstyle = 0;
@@ -259,7 +278,7 @@
         encoding = icq_PacketRead16(p);
       }
       if(font)
-        icq_TCPChatUpdateFont(plink, font, encoding, fontstyle, fontsize);
+        icq_TCPChatUpdateFont(pchat, font, encoding, fontstyle, fontsize);
       presponse=icq_TCPCreateChatFontInfoPacket(plink);
       icq_PacketSend(presponse, plink->socket);
       icq_PacketDelete(presponse);