]> andersk Git - libfaim.git/blobdiff - src/misc.c
- Thu Aug 2 13:28:37 EDT 2001
[libfaim.git] / src / misc.c
index 29f736f41e976d021ccedc533e34248cf7b6e846..dcb978063e7852d751f5913dabb370cac3ca1d0e 100644 (file)
@@ -204,27 +204,35 @@ faim_export unsigned long aim_bos_setbuddylist(struct aim_session_t *sess,
  */
 faim_export unsigned long aim_bos_setprofile(struct aim_session_t *sess,
                                             struct aim_conn_t *conn, 
-                                            char *profile,
-                                            char *awaymsg,
+                                            const char *profile,
+                                            const char *awaymsg,
                                             unsigned short caps)
 {
   struct command_tx_struct *newpacket;
   int i = 0, tmp, caplen;
+  static const char defencoding[] = {"text/aolrtf; charset=\"us-ascii\""};
 
-  if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, 1152+strlen(profile)+1+(awaymsg?strlen(awaymsg):0))))
+  i = 10;
+  if (profile)
+    i += 4+strlen(defencoding)+4+strlen(profile);
+  if (awaymsg)
+    i += 4+strlen(defencoding)+4+strlen(awaymsg);
+  i += 4+512; /* for capabilities */
+
+  if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, i)))
     return -1;
 
-  i += aim_putsnac(newpacket->data, 0x0002, 0x004, 0x0000, sess->snac_nextid);
-  i += aim_puttlv_str(newpacket->data+i, 0x0001, strlen("text/aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\"");
-  i += aim_puttlv_str(newpacket->data+i, 0x0002, strlen(profile), profile);
-  /* why do we send this twice?  */
-  i += aim_puttlv_str(newpacket->data+i, 0x0003, strlen("text/aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\"");
-  
-  /* Away message -- we send this no matter what, even if its blank */
-  if (awaymsg)
+  i = aim_putsnac(newpacket->data, 0x0002, 0x004, 0x0000, sess->snac_nextid);
+
+  if (profile) {
+    i += aim_puttlv_str(newpacket->data+i, 0x0001, strlen(defencoding), defencoding);
+    i += aim_puttlv_str(newpacket->data+i, 0x0002, strlen(profile), profile);
+  }
+
+  if (awaymsg) {
+    i += aim_puttlv_str(newpacket->data+i, 0x0003, strlen(defencoding), defencoding);
     i += aim_puttlv_str(newpacket->data+i, 0x0004, strlen(awaymsg), awaymsg);
-  else
-    i += aim_puttlv_str(newpacket->data+i, 0x0004, 0x0000, NULL);
+  }
 
   /* Capability information. */
  
@@ -487,41 +495,45 @@ faim_export unsigned long aim_bos_reqbuddyrights(struct aim_session_t *sess,
 }
 
 /*
- * aim_send_warning(struct aim_session_t *sess, 
- *                  struct aim_conn_t *conn, char *destsn, int anon)
- * send a warning to destsn.
- * anon is anonymous or not;
- *  AIM_WARN_ANON anonymous
+ * Send a warning to destsn.
+ * 
+ * Flags:
+ *  AIM_WARN_ANON  Send as an anonymous (doesn't count as much)
  *
- * returns -1 on error (couldn't alloc packet), next snacid on success.
+ * returns -1 on error (couldn't alloc packet), 0 on success. 
  *
  */
-faim_export int aim_send_warning(struct aim_session_t *sess, struct aim_conn_t *conn, char *destsn, int anon)
+faim_export int aim_send_warning(struct aim_session_t *sess, struct aim_conn_t *conn, const char *destsn, unsigned long flags)
 {
-  struct command_tx_struct *newpacket;
-  int curbyte;
+       struct command_tx_struct *newpacket;
+       int curbyte;
+       unsigned short outflags = 0x0000;
 
-  if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, strlen(destsn)+13)))
-    return -1;
+       if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, 
+                                       strlen(destsn)+13)))
+               return -1;
 
-  newpacket->lock = 1;
+       newpacket->lock = 1;
 
-  curbyte  = 0;
-  curbyte += aim_putsnac(newpacket->data+curbyte,
-                        0x0004, 0x0008, 0x0000, sess->snac_nextid);
+       curbyte  = 0;
+       curbyte += aim_putsnac(newpacket->data+curbyte,
+                       0x0004, 0x0008, 0x0000, sess->snac_nextid);
 
-  curbyte += aimutil_put16(newpacket->data+curbyte, (anon & AIM_WARN_ANON)?1:0);
+       if (flags & AIM_WARN_ANON)
+               outflags |= 0x0001;
 
-  curbyte += aimutil_put8(newpacket->data+curbyte, strlen(destsn));
+       curbyte += aimutil_put16(newpacket->data+curbyte, outflags); 
+       curbyte += aimutil_put8(newpacket->data+curbyte, strlen(destsn));
+       curbyte += aimutil_putstr(newpacket->data+curbyte, destsn, strlen(destsn));
 
-  curbyte += aimutil_putstr(newpacket->data+curbyte, destsn, strlen(destsn));
+       newpacket->commandlen = curbyte;
+       newpacket->lock = 0;
 
-  newpacket->commandlen = curbyte;
-  newpacket->lock = 0;
+       aim_tx_enqueue(sess, newpacket);
 
-  aim_tx_enqueue(sess, newpacket);
+       aim_cachesnac(sess, 0x0004, 0x0008, 0x0000, destsn, strlen(destsn)+1);
 
-  return (sess->snac_nextid++);
+       return 0;
 }
 
 /*
@@ -558,12 +570,31 @@ faim_internal unsigned long aim_genericreq_n(struct aim_session_t *sess,
 
   newpacket->lock = 1;
 
-  aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid);
+  aim_putsnac(newpacket->data, family, subtype, 0x0000, 0x00000000);
+
+  aim_tx_enqueue(sess, newpacket);
+
+  return sess->snac_nextid;
+}
+
+faim_internal unsigned long aim_genericreq_n_snacid(struct aim_session_t *sess,
+                                                   struct aim_conn_t *conn, 
+                                                   unsigned short family, 
+                                                   unsigned short subtype)
+{
+  struct command_tx_struct *newpacket;
+
+  if (!(newpacket = aim_tx_new(sess, conn, AIM_FRAMETYPE_OSCAR, 0x0002, 10)))
+    return 0;
+
+  newpacket->lock = 1;
 
+  aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid);
   aim_cachesnac(sess, family, subtype, 0x0000, NULL, 0);
 
   aim_tx_enqueue(sess, newpacket);
-  return sess->snac_nextid;
+
+  return sess->snac_nextid++;
 }
 
 /*
@@ -587,14 +618,14 @@ faim_internal unsigned long aim_genericreq_l(struct aim_session_t *sess,
 
   newpacket->lock = 1;
 
-  aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid);
-  aim_cachesnac(sess, family, subtype, 0x0000, NULL, 0);
+  aim_putsnac(newpacket->data, family, subtype, 0x0000, 0x00000000);
 
   /* copy in data */
   newlong = htonl(*longdata);
   memcpy(&(newpacket->data[10]), &newlong, sizeof(u_long));
 
   aim_tx_enqueue(sess, newpacket);
+
   return sess->snac_nextid;
 }
 
@@ -615,14 +646,14 @@ faim_internal unsigned long aim_genericreq_s(struct aim_session_t *sess,
 
   newpacket->lock = 1;
 
-  aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid);
-  aim_cachesnac(sess, family, subtype, 0x0000, NULL, 0);
+  aim_putsnac(newpacket->data, family, subtype, 0x0000, 0x00000000);
 
   /* copy in data */
   newshort = htons(*shortdata);
   memcpy(&(newpacket->data[10]), &newshort, sizeof(u_short));
 
   aim_tx_enqueue(sess, newpacket);
+
   return sess->snac_nextid;
 }
 
@@ -664,8 +695,7 @@ faim_export unsigned long aim_addicbmparam(struct aim_session_t *sess,
   
   newpacket->lock = 1;
 
-  i = aim_putsnac(newpacket->data, 0x0004, 0x0002, 0x0000, sess->snac_nextid);
-  aim_cachesnac(sess, 0x0004, 0x0002, 0x0000, NULL, 0);
+  i = aim_putsnac(newpacket->data, 0x0004, 0x0002, 0x0000, 0x00000000);
 
   i += aimutil_put16(newpacket->data+i, 0x0000); 
   i += aimutil_put16(newpacket->data+i, 0x0000);
@@ -830,7 +860,7 @@ static int generror(struct aim_session_t *sess, aim_module_t *mod, struct comman
 {
   int ret = 0;
   int error = 0;
-  rxcallback_t userfunc;
+  aim_rxcallback_t userfunc;
   struct aim_snac_t *snac2;
 
   snac2 = aim_remsnac(sess, snac->id);
@@ -854,7 +884,7 @@ static int snachandler(struct aim_session_t *sess, aim_module_t *mod, struct com
   if (snac->subtype == 0x0001)
     return generror(sess, mod, rx, snac, data, datalen);
   else if ((snac->family == 0xffff) && (snac->subtype == 0xffff)) {
-    rxcallback_t userfunc;
+    aim_rxcallback_t userfunc;
 
     if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
       return userfunc(sess, rx);
This page took 0.194656 seconds and 4 git commands to generate.