]> andersk Git - libfaim.git/commitdiff
Misc cleanups.
authormid <mid>
Fri, 24 Dec 1999 22:04:01 +0000 (22:04 +0000)
committermid <mid>
Fri, 24 Dec 1999 22:04:01 +0000 (22:04 +0000)
BUGS
CHANGES
README
aim.h
aim_rxqueue.c
faimconfig.h

diff --git a/BUGS b/BUGS
index a2ea402f5a211cbaec88a099fe5abb8f5186d052..81daa41c079984b1f02861ce8502e27928840d86 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -27,3 +27,7 @@ aim_search.c
 aim_snac.c
 ----------
   - Should implement better SNAC handling
+
+aim_tlv.c
+---------
+  - Newer TLV bulk-read routines most likely have leakage somewhere.
diff --git a/CHANGES b/CHANGES
index bc9093d19f4ddace3db262245df6295d9cef03db..f5cad11f4bfef176c2c751c45f9b75aad1592555 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
 
 No release numbers
 ------------------
+ - Fri Dec 24 21:30:06 UTC 1999
+   - Added an error-counting Read() that has been sitting in my inbox
+   - Cleaned up header files, created aim_cbtypes.h.
+
  - Fri Dec 24 11:12:34 UTC 1999
    - Cleaned up both outgoing and incoming ICBM handling.  Anything
        that crashes around there is no longer libfaims fault!
diff --git a/README b/README
index cb9e5634f8f60617aab2d8f8b38c999e34c9b33c..30a067fa1366e34919874e1dabfdea3cd15f2beb 100644 (file)
--- a/README
+++ b/README
@@ -65,15 +65,21 @@ Unfortunatly, there is not currently any documentation on the libfaim API.
 Use the source and utils/faimtest/faimtest.c as a reference when coding
 front-ends.  
 
+Mailing Lists
+-------------
+
+Thanks to Sourceforge, we have our mailing lists back. See:
+http://www.sourceforge.org/mail/?group_id=920  for instructions
+on subscribing to the lists:
+
+  libfaim-devel: Discussion of libfaim and its developement.
+  libfaim-aim-protocol: Discussion of the finer points of OSCAR hacking
 
 Contact Info
 ------------
 
-The author (Adam Fritzler), can be reached at afritz@iname.com or mid@auk.cx.
-
-I did have mailing lists available for faim-related discussion, but they
-have dwindled and eventually broke and to my knowledge have yet to fix 
-themselves.
+The author (Adam Fritzler), can be reached at mid@auk.cx.
 
 Front-end information:
   http://www.auk.cx/faim/
diff --git a/aim.h b/aim.h
index f162872aeeeb204ed7377d1678979ce4b70b10a8..a2d41c9267fc35379d011239e6e9706d669b9571 100644 (file)
--- a/aim.h
+++ b/aim.h
@@ -1,7 +1,13 @@
+/* 
+ * Main libfaim header.  Must be included in client for prototypes/macros.
+ *
+ */
+
 #ifndef __AIM_H__
 #define __AIM_H__
 
 #include <faimconfig.h>
+#include <aim_cbtypes.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -41,7 +47,9 @@
 #define AIM_SIGNON_TOO_SOON    -0x4
 #define AIM_SERVICE_FULL       -0x6f
 
-/* Current Maximum Length for Screen Names (not including NULL) */
+/* 
+ * Current Maximum Length for Screen Names (not including NULL) 
+ */
 #define MAXSNLEN 16
 
 struct login_phase1_struct {
@@ -63,25 +71,14 @@ struct client_info_s {
   char lang[3];
 };
 
-struct connection_info_struct {
-  u_int local_seq_num_origin; /* our first seq num */
-  int local_command_count;
-
-  u_int remote_seq_num_origin; /* oscar's first seqnum */
-  int remote_command_count; /* command_count + seq_num_origin = cur_seq_num */
-
-  char *sn; /* our screen name */
-
-  int fd;                   /* socket descriptor */
-};
-
 #ifndef TRUE
 #define TRUE 1
 #define FALSE 0
 #endif
 
-#define AIM_CONN_MAX 5 
-/* these could be arbitrary, but its easier to use the actual AIM values */
+/* 
+ * These could be arbitrary, but its easier to use the actual AIM values 
+ */
 #define AIM_CONN_TYPE_AUTH 0x0007
 #define AIM_CONN_TYPE_ADS 0x0005
 #define AIM_CONN_TYPE_BOS 2
@@ -93,12 +90,12 @@ struct connection_info_struct {
 #define AIM_CONN_STATUS_RESOLVERR 0x80
 #define AIM_CONN_STATUS_CONNERR 0x40
 
-
 struct aim_conn_t {
   int fd;
   int type;
   int seqnum;
   int status;
+  void *priv; /* misc data the client may want to store */
   time_t lastactivity; /* time of last transmit */
   int forcedlatency; 
   struct aim_rxcblist_t *handlerlist;
@@ -145,29 +142,36 @@ struct aim_userinfo_s {
   u_long sessionlen;  
 };
 
-/* TLV-related tidbits */
+/*
+ * TLV handling
+ */
+
+/* Generic TLV structure. */
 struct aim_tlv_t {
   u_short type;
   u_short length;
   u_char *value;
 };
 
+/* List of above. */
 struct aim_tlvlist_t {
   struct aim_tlv_t *tlv;
   struct aim_tlvlist_t *next;
 };
+
+/* TLV-handling functions */
 struct aim_tlvlist_t *aim_readtlvchain(u_char *buf, int maxlen);
 void aim_freetlvchain(struct aim_tlvlist_t **list);
 struct aim_tlv_t *aim_grabtlv(u_char *src);
 struct aim_tlv_t *aim_grabtlvstr(u_char *src);
+struct aim_tlv_t *aim_gettlv(struct aim_tlvlist_t *, u_short, int);
+char *aim_gettlv_str(struct aim_tlvlist_t *, u_short, int);
 int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv);
 struct aim_tlv_t *aim_createtlv(void);
 int aim_freetlv(struct aim_tlv_t **oldtlv);
 int aim_puttlv_16(u_char *, u_short, u_short);
 
-/* some prototypes... */
 
-/*   implicitly or explicitly called */
 int aim_get_command(void);
 int aim_rxdispatch(void);
 int aim_logoff(void);
@@ -221,150 +225,9 @@ int aim_clearhandlers(struct aim_conn_t *conn);
 extern struct aim_snac_t *aim_outstanding_snacs;
 extern u_long aim_snac_nextid;
 
-#define AIM_CB_FAM_ACK 0x0000
-#define AIM_CB_FAM_GEN 0x0001
-#define AIM_CB_FAM_LOC 0x0002
-#define AIM_CB_FAM_BUD 0x0003
-#define AIM_CB_FAM_MSG 0x0004
-#define AIM_CB_FAM_ADS 0x0005
-#define AIM_CB_FAM_INV 0x0006
-#define AIM_CB_FAM_ADM 0x0007
-#define AIM_CB_FAM_POP 0x0008
-#define AIM_CB_FAM_BOS 0x0009
-#define AIM_CB_FAM_LOK 0x000a
-#define AIM_CB_FAM_STS 0x000b
-#define AIM_CB_FAM_TRN 0x000c
-#define AIM_CB_FAM_CTN 0x000d /* ChatNav */
-#define AIM_CB_FAM_CHT 0x000e /* Chat */
-#define AIM_CB_FAM_SPECIAL 0xffff /* Internal libfaim use */
-
-#define AIM_CB_ACK_ACK 0x0001
-
-#define AIM_CB_GEN_ERROR 0x0001
-#define AIM_CB_GEN_CLIENTREADY 0x0002
-#define AIM_CB_GEN_SERVERREADY 0x0003
-#define AIM_CB_GEN_SERVICEREQ 0x0004
-#define AIM_CB_GEN_REDIRECT 0x0005
-#define AIM_CB_GEN_RATEINFOREQ 0x0006
-#define AIM_CB_GEN_RATEINFO 0x0007
-#define AIM_CB_GEN_RATEINFOACK 0x0008
-#define AIM_CB_GEN_RATECHANGE 0x000a
-#define AIM_CB_GEN_SERVERPAUSE 0x000b
-#define AIM_CB_GEN_SERVERRESUME 0x000d
-#define AIM_CB_GEN_REQSELFINFO 0x000e
-#define AIM_CB_GEN_SELFINFO 0x000f
-#define AIM_CB_GEN_EVIL 0x0010
-#define AIM_CB_GEN_SETIDLE 0x0011
-#define AIM_CB_GEN_MIGRATIONREQ 0x0012
-#define AIM_CB_GEN_MOTD 0x0013
-#define AIM_CB_GEN_SETPRIVFLAGS 0x0014
-#define AIM_CB_GEN_WELLKNOWNURL 0x0015
-#define AIM_CB_GEN_NOP 0x0016
-#define AIM_CB_GEN_DEFAULT 0xffff
-
-#define AIM_CB_LOC_ERROR 0x0001
-#define AIM_CB_LOC_REQRIGHTS 0x0002
-#define AIM_CB_LOC_RIGHTSINFO 0x0003
-#define AIM_CB_LOC_SETUSERINFO 0x0004
-#define AIM_CB_LOC_REQUSERINFO 0x0005
-#define AIM_CB_LOC_USERINFO 0x0006
-#define AIM_CB_LOC_WATCHERSUBREQ 0x0007
-#define AIM_CB_LOC_WATCHERNOT 0x0008
-#define AIM_CB_LOC_DEFAULT 0xffff
-
-#define AIM_CB_BUD_ERROR 0x0001
-#define AIM_CB_BUD_REQRIGHTS 0x0002
-#define AIM_CB_BUD_RIGHTSINFO 0x0003
-#define AIM_CB_BUD_ADDBUDDY 0x0004
-#define AIM_CB_BUD_REMBUDDY 0x0005
-#define AIM_CB_BUD_REJECT 0x000a
-#define AIM_CB_BUD_ONCOMING 0x000b
-#define AIM_CB_BUD_OFFGOING 0x000c
-#define AIM_CB_BUD_DEFAULT 0xffff
-
-#define AIM_CB_MSG_ERROR 0x0001
-#define AIM_CB_MSG_PARAMINFO 0x0005
-#define AIM_CB_MSG_INCOMING 0x0007
-#define AIM_CB_MSG_EVIL 0x0009
-#define AIM_CB_MSG_MISSEDCALL 0x000a
-#define AIM_CB_MSG_CLIENTERROR 0x000b
-#define AIM_CB_MSG_ACK 0x000c
-#define AIM_CB_MSG_DEFAULT 0xffff
-
-#define AIM_CB_ADS_ERROR 0x0001
-#define AIM_CB_ADS_DEFAULT 0xffff
-
-#define AIM_CB_INV_ERROR 0x0001
-#define AIM_CB_INV_DEFAULT 0xffff
-
-#define AIM_CB_ADM_ERROR 0x0001
-#define AIM_CB_ADM_INFOCHANGE_REPLY 0x0005
-#define AIM_CB_ADM_DEFAULT 0xffff
-
-#define AIM_CB_POP_ERROR 0x0001
-#define AIM_CB_POP_DEFAULT 0xffff
-
-#define AIM_CB_BOS_ERROR 0x0001
-#define AIM_CB_BOS_DEFAULT 0xffff
-
-#define AIM_CB_LOK_ERROR 0x0001
-#define AIM_CB_LOK_DEFAULT 0xffff
-
-#define AIM_CB_STS_ERROR 0x0001
-#define AIM_CB_STS_SETREPORTINTERVAL 0x0002
-#define AIM_CB_STS_REPORTACK 0x0004
-#define AIM_CB_STS_DEFAULT 0xffff
-
-#define AIM_CB_TRN_ERROR 0x0001
-#define AIM_CB_TRN_DEFAULT 0xffff
-
-#define AIM_CB_CTN_ERROR 0x0001
-#define AIM_CB_CTN_DEFAULT 0xffff
-
-#define AIM_CB_CHT_ERROR 0x0001
-#define AIM_CB_CHT_DEFAULT 0xffff
-
-#define AIM_CB_SPECIAL_AUTHSUCCESS 0x0001
-#define AIM_CB_SPECIAL_AUTHOTHER 0x0002
-#define AIM_CB_SPECIAL_UNKNOWN 0xffff
-#define AIM_CB_SPECIAL_DEFAULT AIM_CB_SPECIAL_UNKNOWN
-
-#if 0
-#define AIM_CB_INCOMING_IM 0
-#define AIM_CB_ONCOMING_BUDDY 1
-#define AIM_CB_OFFGOING_BUDDY 2
-#define AIM_CB_MISSED_IM 3
-#define AIM_CB_MISSED_CALL 4
-#define AIM_CB_LOGIN_P4_C1 5
-#define AIM_CB_LOGIN_P4_C2 6
-#define AIM_CB_LOGIN_P2_1 7
-#define AIM_CB_LOGIN_P2_2 8
-#define AIM_CB_LOGIN_P3_B 9
-#define AIM_CB_LOGIN_P3D_A 10
-#define AIM_CB_LOGIN_P3D_B 11
-#define AIM_CB_LOGIN_P3D_C 12
-#define AIM_CB_LOGIN_P3D_D 13
-#define AIM_CB_LOGIN_P3D_E 14
-#define AIM_CB_LOGIN_P3D_F 15
-#define AIM_CB_RATECHANGE 16
-#define AIM_CB_USERERROR 17
-#define AIM_CB_UNKNOWN 18
-#define AIM_CB_USERINFO 19
-#define AIM_CB_SEARCH_ADDRESS 20
-#define AIM_CB_SEARCH_NAME 21
-#define AIM_CB_SEARCH_FAIL 22
-
-#define AIM_CB_AUTH_ERROR 23
-#define AIM_CB_AUTH_SUCCESS 24
-#define AIM_CB_AUTH_SVRREADY 25
-
-#define AIM_CB_AUTH_OTHER 26
-#define AIM_CB_AUTH_INFOCHNG_REPLY 27
-#define AIM_CB_CHATNAV_SVRREADY 28
-#endif
-
-int Read(int, u_char *, int);
-
+/*
+ * Generic SNAC structure.  Rarely if ever used.
+ */
 struct aim_snac_t {
   u_long id;
   u_short family;
@@ -379,6 +242,7 @@ struct aim_snac_t *aim_remsnac(u_long id);
 int aim_cleansnacs(int maxage);
 int aim_putsnac(u_char *, int, int, int, u_long);
 
+
 void aim_connrst(void);
 struct aim_conn_t *aim_conn_getnext(void);
 void aim_conn_close(struct aim_conn_t *deadconn);
@@ -460,8 +324,5 @@ int aimutil_tokslen(char *toSearch, int index, char dl);
 int aimutil_itemcnt(char *toSearch, char dl);
 char *aimutil_itemidx(char *toSearch, int index, char dl);
 
-struct aim_tlv_t *aim_gettlv(struct aim_tlvlist_t *list, u_short type, int nth);
-char *aim_gettlv_str(struct aim_tlvlist_t *list, u_short type, int nth);
-
 #endif /* __AIM_H__ */
 
index f89fb2c7e672c26bb48c851a11c6bc59ff16ac05..f33c458ca3726c6ce646a5ba645db3d538a8f92d 100644 (file)
 #include "aim.h"
 
 /*
-  This is a modified read() to make SURE we get the number
-  of bytes we are told to, otherwise block.
- */
+ * This is a modified read() to make SURE we get the number
+ * of bytes we are told to, otherwise block.
+ *
+ * Modified to count errno (Sébastien Carpe <scarpe@atos-group.com>)
+ * 
+*/
 int Read(int fd, u_char *buf, int len)
 {
   int i = 0;
   int j = 0;
-
+  int err_count=0;
+  
   while ((i < len) && (!(i < 0)))
     {
       j = read(fd, &(buf[i]), len-i);
       if ( (j < 0) && (errno != EAGAIN))
-       return -errno; /* fail */
-      else
-       i += j; /* success, continue */
-    }
-#if 0
-  printf("\nRead Block: (%d/%04x)\n", len, len);
-  printf("\t");
-  for (j = 0; j < len; j++)
-    {
-      if (j % 8 == 0)
-       printf("\n\t");
-      if (buf[j] >= ' ' && buf[j] < 127)
-        printf("%c=%02x ",buf[j], buf[j]);
+        return -errno; /* fail */
+      else if (j==0) 
+       {
+         err_count++;
+         if (err_count> MAX_READ_ERROR)  {
+           /*
+            * Reached maximum number of allowed read errors.
+            *
+            * Lets suppose the connection is lost and errno didn't
+            * know it.
+            *
+            */
+          return (-1); 
+       }
+      } 
       else
-        printf("0x%02x ", buf[j]);
+        i += j; /* success, continue */
     }
-  printf("\n\n");
-#endif
   return i;
 }
 
index 2584d59692af60ba6ebfe54cd5dd4ade37408b88..f61bc4ad067098d6bb060151a3785c170e001d79 100644 (file)
@@ -1,42 +1,81 @@
-#ifndef __FAIMCONFIG_H__
-#define __FAIMCONFIG_H__
-
 /*
-  faimconfig.h
-
 Contains various compile-time options that apply _only to the faim backend_.
-  Note that setting any of these options in a frontend header does not imply
-  that they'll get set here.  Notably, the 'debug' of this file is _not_ 
-  the same as the frontend 'debug'.  They can be different values.
-
 faimconfig.h
+ *
* Contains various compile-time options that apply _only to libfaim.
* Note that setting any of these options in a frontend header does not imply
* that they'll get set here.  Notably, the 'debug' of this file is _not_ 
* the same as the frontend 'debug'.  They can be different values.
+ *
  */
 
-/* 
-   set debug to be > 0 if you want debugging information spewing
-   on the attached tty.  set to 0 for daily use.  this value
-   is _not_ inherited by the frontend, only this backend.
+#ifndef __FAIMCONFIG_H__
+#define __FAIMCONFIG_H__
 
-   Default: 0  
+/* 
+ * set debug to be > 0 if you want debugging information spewing
+ * on the attached tty.  set to 0 for daily use.  this value
+ * is _not_ inherited by the frontend, only this backend.
+ *
+ * Default: 0  
 */
 #define debug 0 
 
 /*
-  define TIS_TELNET_PROXY if you have a TIS firewall (Gauntlet) and
-  you want to use FAIM through the firewall
-
-  Default: undefined
+ * Maximum number of connections the library can simultaneously
+ * handle.  Five is fairly arbitrary.  Only one client that I 
+ * know of uses more than one concurrently anyway (which means
+ * its only lightly tested too).  
+ *
+ * Default: 5
+ *
  */
-/* #define TIS_TELNET_PROXY "proxy.mydomain.com" */
+#define AIM_CONN_MAX 5 
 
+/*
+ *  define TIS_TELNET_PROXY if you have a TIS firewall (Gauntlet) and
+ * you want to use FAIM through the firewall
+ *
+ * XXX: The TIS firewall code hasn't existed, let alone worked,
+ *      in many, many months.  I'd be happy to take fixes.
+ *
+ * Default: undefined
+ */
+#undef TIS_TELNET_PROXY "proxy.mydomain.com"
 
-/* #define USE_SNAC_FOR_IMS */
-
-/* ---- these shouldn't need any changes ---- */
+/*
+ * USE_SNAC_FOR_IMS is an old feature that allowed better
+ * tracking of error messages by caching SNAC IDs of outgoing
+ * ICBMs and comparing them to incoming errors.  However,
+ * its a helluvalot of overhead for something that should
+ * rarely happen.  
+ *
+ * Default: undefined.  Hasn't been tested in quite a long
+ * time.  Most likely doesn't even compile.  
+ *
+ */
+#undef USE_SNAC_FOR_IMS
 
-/* authentication server of OSCAR */
+/*
+ * Default Authorizer server name and TCP port for the OSCAR farm.  
+ *
+ * You shouldn't need to change this unless you're writing
+ * your own server. 
+ *
+ * Note that only one server is needed to start the whole
+ * AIM process.  The later server addresses come from
+ * the authorizer service.
+ *
+ */
 #define FAIM_LOGIN_SERVER "login.oscar.aol.com"
-/* port on OSCAR authenticator to connect to */
 #define FAIM_LOGIN_PORT 5190
 
+/*
+ * MAX_READ_ERROR can be decreased if you find dead connections
+ * lingering around, and not getting detected, for too long.
+ *
+ * Default: 100
+ *
+ */
+#define MAX_READ_ERROR 100
 
 #endif /* __FAIMCONFIG_H__ */
This page took 0.069203 seconds and 5 git commands to generate.