Changes in / [5cb21d1:c180110]


Ignore:
Files:
3 added
1 deleted
39 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    r5cb21d1 rc180110  
    1010
    1111# Program variables
    12 objects = bitlbee.o dcc.o help.o ipc.o irc.o irc_im.o irc_channel.o irc_commands.o irc_send.o irc_user.o irc_util.o nick.o $(OTR_BI) query.o root_commands.o set.o storage.o $(STORAGE_OBJS) unix.o conf.o log.o
    13 headers = $(wildcard $(_SRCDIR_)*.h $(_SRCDIR_)lib/*.h $(_SRCDIR_)protocols/*.h)
     12objects = bitlbee.o dcc.o help.o ipc.o irc.o irc_im.o irc_channel.o irc_commands.o irc_send.o irc_user.o irc_util.o nick.o $(OTR_BI) query.o root_commands.o set.o storage.o $(STORAGE_OBJS)
     13headers = bitlbee.h commands.h conf.h config.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h lib/events.h lib/ftutil.h lib/http_client.h lib/ini.h lib/json.h lib/json_util.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/ssl_client.h lib/url.h protocols/account.h protocols/bee.h protocols/ft.h protocols/nogaim.h
    1414subdirs = lib protocols
    1515
    16 OUTFILE = bitlbee
     16ifeq ($(TARGET),i586-mingw32msvc)
     17objects += win32.o
     18LDFLAGS+=-lws2_32
     19EFLAGS+=-lsecur32
     20OUTFILE=bitlbee.exe
     21else
     22objects += unix.o conf.o log.o
     23OUTFILE=bitlbee
     24endif
    1725
    1826# Expansion of variables
     
    94102        mkdir -p $(DESTDIR)$(INCLUDEDIR)
    95103        $(INSTALL) -m 0644 config.h $(DESTDIR)$(INCLUDEDIR)
    96         for i in $(headers); do $(INSTALL) -m 0644 $$i $(DESTDIR)$(INCLUDEDIR); done
     104        for i in $(headers); do $(INSTALL) -m 0644 $(_SRCDIR_)$$i $(DESTDIR)$(INCLUDEDIR); done
    97105        mkdir -p $(DESTDIR)$(PCDIR)
    98106        $(INSTALL) -m 0644 bitlbee.pc $(DESTDIR)$(PCDIR)
     
    141149install-systemd: systemd
    142150ifdef SYSTEMDSYSTEMUNITDIR
     151ifeq ($(shell id -u),0)
    143152        mkdir -p $(DESTDIR)$(SYSTEMDSYSTEMUNITDIR)
    144153        $(INSTALL) -m 0644 init/bitlbee.service $(DESTDIR)$(SYSTEMDSYSTEMUNITDIR)
     
    146155        $(INSTALL) -m 0644 $(_SRCDIR_)init/bitlbee.socket $(DESTDIR)$(SYSTEMDSYSTEMUNITDIR)
    147156else
    148         @echo SYSTEMDSYSTEMUNITDIR not set, not installing systemd unit files.
     157        @echo Not root, so not installing systemd files.
     158endif
    149159endif
    150160
  • bitlbee.c

    r5cb21d1 rc180110  
    127127        global.listen_watch_source_id = b_input_add( global.listen_socket, B_EV_IO_READ, bitlbee_io_new_client, NULL );
    128128       
     129#ifndef _WIN32
    129130        if( !global.conf->nofork )
    130131        {
     
    150151                                }
    151152        }
     153#endif
    152154       
    153155        if( global.conf->runmode == RUNMODE_FORKDAEMON )
     
    157159                ipc_master_listen_socket();
    158160       
     161#ifndef _WIN32
    159162        if( ( fp = fopen( global.conf->pidfile, "w" ) ) )
    160163        {
     
    166169                log_message( LOGLVL_WARNING, "Warning: Couldn't write PID to `%s'", global.conf->pidfile );
    167170        }
     171#endif
    168172       
    169173        if( !global.conf->nofork )
     
    291295        }
    292296       
     297#ifndef _WIN32
    293298        if( global.conf->runmode == RUNMODE_FORKDAEMON )
    294299        {
     
    352357        }
    353358        else
     359#endif
    354360        {
    355361                log_message( LOGLVL_INFO, "Creating new connection with fd %d.", new_socket );
  • bitlbee.h

    r5cb21d1 rc180110  
    3535#endif
    3636
     37/* Depend on Windows 2000 for now since we need getaddrinfo() */
     38#define _WIN32_WINNT 0x0501
     39
    3740#define PACKAGE "BitlBee"
    3841#define BITLBEE_VERSION "3.2.2"
     
    5760#include <ctype.h>
    5861#include <errno.h>
     62
     63#ifndef _WIN32
    5964#include <syslog.h>
     65#endif
     66
    6067#include <glib.h>
    6168#include <gmodule.h>
  • configure

    r5cb21d1 rc180110  
    341341int main()
    342342{
    343 
    344         res_query( NULL, 0, 0, NULL, 0);
    345         dn_expand( NULL, NULL, NULL, NULL, 0);
    346         dn_skipname( NULL, NULL);
    347 }
    348 '
    349 RESOLV_NS_TESTCODE='
    350 #include <sys/types.h>
    351 #include <netinet/in.h>
    352 #include <arpa/nameser.h>
    353 #include <resolv.h>
    354 
    355 int main()
    356 {
    357343        ns_initparse( NULL, 0, NULL );
    358344        ns_parserr( NULL, ns_s_an, 0, NULL );
    359345}
    360346'
    361 RESOLV_NS_TYPES_TESTCODE='
    362 #include <sys/types.h>
    363 #include <netinet/in.h>
    364 #include <arpa/nameser.h>
    365 
    366 int main()
    367 {
    368         ns_msg nsh;
    369         ns_rr rr;
    370 
    371         /* Not all platforms we want to work on have
    372          ns_* routines, so use this to make sure
    373          the compiler uses it.*/
    374         return (int)(sizeof(nsh) + sizeof(rr));
    375 }
    376 '
    377347
    378348detect_resolv_dynamic()
    379349{
    380350        case "$arch" in
    381         OpenBSD )
    382                 # In FreeBSD res_*/dn_* routines are present in libc.so
    383                 LIBRESOLV=;;
    384351        FreeBSD )
    385                 # In FreeBSD res_*/dn_* routines are present in libc.so
    386                 LIBRESOLV=;;
    387         CYGWIN* )
    388                 # In Cygwin res_*/dn_* routines are present in libc.so
     352                # In FreeBSD res_* routines are present in libc.so
    389353                LIBRESOLV=;;
    390354        * )
     
    421385}
    422386
    423 detect_resolv_ns_dynamic()
    424 {
    425         case "$arch" in
    426         FreeBSD )
    427                 # In FreeBSD ns_ routines are present in libc.so
    428                 LIBRESOLV=;;
    429         * )
    430                 LIBRESOLV=-lresolv;;
    431         esac
    432         TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
    433         ret=1
    434         echo "$RESOLV_NS_TESTCODE" | $CC -o $TMPFILE -x c - $LIBRESOLV >/dev/null 2>/dev/null
    435         if [ "$?" = "0" ]; then
    436                 ret=0
    437         fi
    438 
    439         rm -f $TMPFILE
    440         return $ret
    441 }
    442 
    443 detect_resolv_ns_static()
    444 {
    445         TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
    446         ret=1
    447         for i in $systemlibdirs; do
    448                 if [ -f $i/libresolv.a ]; then
    449                         echo "$RESOLV_NS_TESTCODE" | $CC -o $TMPFILE -x c - -Wl,$i/libresolv.a >/dev/null 2>/dev/null
    450                         if [ "$?" = "0" ]; then
    451                                 ret=0
    452                         fi
    453                 fi
    454         done
    455 
    456         rm -f $TMPFILE
    457         return $ret
    458 }
    459 
    460 detect_nameser_has_ns_types()
    461 {
    462     TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
    463     ret=1
    464     # since we aren't actually linking with ns_* routines
    465     # we can just compile the test code
    466     echo "$RESOLV_NS_TYPES_TESTCODE" | $CC -o $TMPFILE -x c -  >/dev/null 2>/dev/null
    467     if [ "$?" = "0" ]; then
    468         ret=0
    469     fi
    470 
    471     rm -f $TMPFILE
    472     return $ret
    473 }
    474 
    475387if [ "$ssl" = "auto" ]; then
    476388        detect_gnutls
     
    484396elif [ "$ssl" = "nss" ]; then
    485397        detect_nss
     398elif [ "$ssl" = "sspi" ]; then
     399        echo
    486400elif [ "$ssl" = "openssl" ]; then
    487401        echo
     
    526440echo 'SSL_CLIENT=ssl_'$ssl'.o' >> Makefile.settings
    527441
    528 if detect_nameser_has_ns_types; then
    529         echo '#define NAMESER_HAS_NS_TYPES' >> config.h
    530 fi
    531442if detect_resolv_dynamic || detect_resolv_static; then
    532443        echo '#define HAVE_RESOLV_A' >> config.h
    533     if detect_resolv_ns_dynamic || detect_resolv_ns_static; then
    534             echo '#define HAVE_RESOLV_A_WITH_NS' >> config.h
    535     fi
    536 else
    537     echo 'Insufficient resolv routines. Jabber server must be set explicitly'
    538 fi
    539 
     444fi
    540445
    541446STORAGES="xml"
     
    606511        # BI == built-in
    607512        echo '#define OTR_BI' >> config.h
    608         echo "EFLAGS+=-L${otrprefix}/lib -lotr -lgcrypt" >> Makefile.settings
     513        echo "EFLAGS+=-L${otrprefix}/lib -lotr" >> Makefile.settings
    609514        echo "CFLAGS+=-I${otrprefix}/include" >> Makefile.settings
    610515        echo 'OTR_BI=otr.o' >> Makefile.settings
     
    804709;;
    805710CYGWIN* )
     711        echo 'Cygwin is not officially supported.'
    806712;;
    807713Windows )
    808         echo 'Native windows compilation is not supported anymore, use cygwin instead.'
    809714;;
    810715* )
  • debian/rules

    r5cb21d1 rc180110  
    3434endif
    3535
    36 CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
    37 CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
    38 LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)
    39 
    40 CONFIGURE_OVERRIDES:=CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)"
    41 
    4236build: build-stamp
    4337build-stamp:
     
    4539
    4640        mkdir -p debian/build-native
    47         ROOT=$$PWD; cd debian/build-native; $(BITLBEE_CONFIGURE_VERSION) $(CONFIGURE_OVERRIDES) $$ROOT/configure --debug=$(DEBUG) --prefix=/usr --etcdir=/etc/bitlbee --events=libevent --otr=$(BITLBEE_OTR) --skype=$(BITLBEE_SKYPE) $(BITLBEE_CONFIGURE_FLAGS)
     41        ROOT=$$PWD; cd debian/build-native; $(BITLBEE_CONFIGURE_VERSION) $(shell dpkg-buildflags --export=configure) $$ROOT/configure --debug=$(DEBUG) --prefix=/usr --etcdir=/etc/bitlbee --events=libevent --otr=$(BITLBEE_OTR) --skype=$(BITLBEE_SKYPE) $(BITLBEE_CONFIGURE_FLAGS)
    4842        $(MAKE) -C debian/build-native
    4943
    5044ifeq ($(BITLBEE_LIBPURPLE),1)
    5145        mkdir -p debian/build-libpurple
    52         ROOT=$$PWD; cd debian/build-libpurple; $(BITLBEE_CONFIGURE_VERSION) $(CONFIGURE_OVERRIDES) $$ROOT/configure --debug=$(DEBUG) --prefix=/usr --etcdir=/etc/bitlbee --purple=1 $(BITLBEE_CONFIGURE_FLAGS)
     46        ROOT=$$PWD; cd debian/build-libpurple; $(BITLBEE_CONFIGURE_VERSION) $(shell dpkg-buildflags --export=configure) $$ROOT/configure --debug=$(DEBUG) --prefix=/usr --etcdir=/etc/bitlbee --purple=1 $(BITLBEE_CONFIGURE_FLAGS)
    5347        $(MAKE) -C debian/build-libpurple
    5448endif
  • doc/user-guide/Makefile

    r5cb21d1 rc180110  
    1717
    1818%.html: %.db.xml
    19         xsltproc --param generate.consistent.ids 1 --output $@ http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl $<
     19        xsltproc --output $@ http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl $<
    2020
    2121%.pdf: %.db.xml
  • doc/user-guide/commands.xml

    r5cb21d1 rc180110  
    17901790
    17911791        <bitlbee-command name="blist">
    1792                 <syntax>blist [all|online|offline|away] [&lt;pattern&gt;]</syntax>
     1792                <syntax>blist [all|online|offline|away]</syntax>
    17931793                <short-description>List all the buddies in the current channel</short-description>
    17941794
     
    17961796                        <para>
    17971797                                You can get a more readable buddy list using the <emphasis>blist</emphasis> command. If you want a complete list (including the offline users) you can use the <emphasis>all</emphasis> argument.
    1798                         </para>
    1799 
    1800                         <para>
    1801                                 A perl-compatible regular expression can be supplied as <emphasis>pattern</emphasis> to filter the results (case-insensitive).
    18021798                        </para>
    18031799                </description>
  • help.c

    r5cb21d1 rc180110  
    4242        *help = h = g_new0 ( help_t, 1 );
    4343       
    44         h->fd = open( helpfile, O_RDONLY );
     44        h->fd = open( helpfile, O_RDONLY
     45#ifdef _WIN32
     46                                  | O_BINARY
     47#endif
     48                                  );
    4549       
    4650        if( h->fd == -1 )
  • ipc.c

    r5cb21d1 rc180110  
    2828#include "ipc.h"
    2929#include "commands.h"
     30#ifndef _WIN32
    3031#include <sys/uio.h>
    3132#include <sys/un.h>
     33#endif
    3234
    3335GSList *child_list = NULL;
     
    841843}
    842844
     845#ifndef _WIN32
    843846char *ipc_master_save_state()
    844847{
     
    939942        return 1;
    940943}
     944#else
     945int ipc_master_listen_socket()
     946{
     947        /* FIXME: Open named pipe \\.\BITLBEE */
     948        return 0;
     949}
     950#endif
    941951
    942952int ipc_master_load_state( char *statefile )
  • irc.c

    r5cb21d1 rc180110  
    2727#include "ipc.h"
    2828#include "dcc.h"
    29 #include "lib/ssl_client.h"
    3029
    3130GSList *irc_connection_list;
     
    172171        nogaim_init();
    173172#endif
    174 
    175         /* SSL library initialization also should be done after the fork, to
    176            avoid shared CSPRNG state. This is required by NSS, which refuses to
    177            work if a fork is detected */
    178         ssl_init();
    179173       
    180174        for( l = irc_plugins; l; l = l->next )
  • irc_commands.c

    r5cb21d1 rc180110  
    365365                                cmd[2][strlen(cmd[2])-1] = '\0';
    366366                       
    367                         ctcp = split_command_parts( cmd[2] + 1, 0 );
     367                        ctcp = split_command_parts( cmd[2] + 1 );
    368368                        iu->f->ctcp( iu, ctcp );
    369369                }
  • irc_im.c

    r5cb21d1 rc180110  
    637637        irc_send_msg( iu, "PRIVMSG", ic->name, wrapped, ts );
    638638        g_free( ts );
    639         g_free( wrapped );
    640639       
    641640        return TRUE;
  • lib/Makefile

    r5cb21d1 rc180110  
    1313
    1414# [SH] Program variables
    15 objects = arc.o base64.o $(EVENT_HANDLER) ftutil.o http_client.o ini.o json.o json_util.o md5.o misc.o oauth.o oauth2.o proxy.o sha1.o $(SSL_CLIENT) url.o xmltree.o ns_parse.o
     15objects = arc.o base64.o $(EVENT_HANDLER) ftutil.o http_client.o ini.o json.o json_util.o md5.o misc.o oauth.o oauth2.o proxy.o sha1.o $(SSL_CLIENT) url.o xmltree.o
    1616
    1717LFLAGS += -r
  • lib/events.h

    r5cb21d1 rc180110  
    3737
    3838#include <sys/types.h>
     39#ifndef _WIN32
    3940#include <sys/socket.h>
    4041#include <netdb.h>
    4142#include <netinet/in.h>
     43#endif
    4244#include <glib.h>
    4345#include <gmodule.h>
  • lib/events_glib.c

    r5cb21d1 rc180110  
    3131#include <string.h>
    3232#include <sys/types.h>
     33#ifndef _WIN32
    3334#include <sys/socket.h>
    3435#include <netdb.h>
     
    3637#include <arpa/inet.h>
    3738#include <unistd.h>
     39#else
     40#include "sock.h"
     41#define ETIMEDOUT WSAETIMEDOUT
     42#define EINPROGRESS WSAEINPROGRESS
     43#endif
    3844#include <fcntl.h>
    3945#include <errno.h>
  • lib/http_client.c

    r5cb21d1 rc180110  
    292292
    293293cleanup:
    294         /* Avoid g_source_remove warnings */
    295         req->inpa = 0;
    296 
    297294        if( req->ssl )
    298295                ssl_disconnect( req->ssl );
  • lib/misc.c

    r5cb21d1 rc180110  
    420420void random_bytes( unsigned char *buf, int count )
    421421{
     422#ifndef _WIN32
    422423        static int use_dev = -1;
    423424       
     
    469470       
    470471        if( !use_dev )
     472#endif
    471473        {
    472474                int i;
     
    523525        ns_msg nsh;
    524526        ns_rr rr;
    525         int n, len, size;
     527        int i, n, len, size;
    526528       
    527529        g_snprintf( name, sizeof( name ), "_%s._%s.%s", service, protocol, domain );
     
    536538        while( ns_parserr( &nsh, ns_s_an, n, &rr ) == 0 )
    537539        {
    538                 char name[NS_MAXDNAME];
    539 
    540                 if( ns_rr_rdlen( rr ) < 7)
    541                     break;
    542 
     540                size = ns_rr_rdlen( rr );
    543541                buf = ns_rr_rdata( rr );
    544542               
    545                 if( dn_expand(querybuf, querybuf + size, &buf[6], name, NS_MAXDNAME) == -1 )
     543                len = 0;
     544                for( i = 6; i < size && buf[i]; i += buf[i] + 1 )
     545                        len += buf[i] + 1;
     546               
     547                if( i > size )
    546548                        break;
    547 
    548                 len = strlen(name) + 1;
    549549               
    550550                reply = g_malloc( sizeof( struct ns_srv_reply ) + len );
    551                 memcpy( reply->name, name, len );
     551                memcpy( reply->name, buf + 7, len );
     552               
     553                for( i = buf[6]; i < len && buf[7+i]; i += buf[7+i] + 1 )
     554                        reply->name[i] = '.';
     555               
     556                if( i > len )
     557                {
     558                        g_free( reply );
     559                        break;
     560                }
    552561               
    553562                reply->prio = ( buf[0] << 8 ) | buf[1];
     
    673682   white\ space in 'various ways'. Returns a NULL-terminated static
    674683   char** so watch out with nested use! Definitely not thread-safe. */
    675 char **split_command_parts( char *command, int limit )
     684char **split_command_parts( char *command )
    676685{
    677686        static char *cmd[IRC_MAX_ARGS+1];
     
    683692        k = 1;
    684693        for( s = command; *s && k < IRC_MAX_ARGS; s ++ )
    685         {
    686694                if( *s == ' ' && !q )
    687695                {
    688696                        *s = 0;
    689697                        while( *++s == ' ' );
    690                         if( k != limit && (*s == '"' || *s == '\'') )
     698                        if( *s == '"' || *s == '\'' )
    691699                        {
    692700                                q = *s;
     
    696704                        {
    697705                                cmd[k++] = s;
    698                                 if (limit && k > limit) {
    699                                         break;
    700                                 }
    701706                                s --;
    702707                        }
     
    717722                        q = *s = 0;
    718723                }
    719         }
    720724       
    721725        /* Full zero-padding for easier argc checking. */
  • lib/misc.h

    r5cb21d1 rc180110  
    3838};
    3939
    40 #ifndef NAMESER_HAS_NS_TYPES
    41 
    42 #define NS_MAXDNAME 1025
    43 #define NS_INT16SZ  2
    44 #define NS_INT32SZ  4
    45 
    46 #define NS_GET16(s, cp) do { \
    47         register const unsigned char *t_cp = (const unsigned char*)(cp); \
    48         (s) = ((guint16)t_cp[0] << 8) \
    49             | ((guint16)t_cp[1]) \
    50             ; \
    51         (cp) += NS_INT16SZ; \
    52 } while(0)
    53 
    54 #define NS_GET32(s, cp) do { \
    55         register const unsigned char *t_cp = (const unsigned char*)(cp); \
    56         (s) = ((guint16)t_cp[0] << 24) \
    57             | ((guint16)t_cp[1] << 16) \
    58             | ((guint16)t_cp[2] << 8) \
    59             | ((guint16)t_cp[3]) \
    60             ; \
    61         (cp) += NS_INT32SZ; \
    62 } while(0)
    63 
    64 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
    65 #define ns_rr_rdata(rr) ((rr).rdata + 0)
    66 
    67 struct _ns_flagdata { int mask, shift; };
    68 
    69 typedef struct __ns_rr {
    70         char name[NS_MAXDNAME];
    71         guint16 type;
    72         guint16 rr_class;
    73         guint32 ttl;
    74         guint16 rdlength;
    75         const unsigned char* rdata;
    76 } ns_rr;
    77 
    78 typedef enum __ns_sect {
    79         ns_s_qd = 0,
    80         ns_s_zn = 0,
    81         ns_s_an = 1,
    82         ns_s_pr = 1,
    83         ns_s_ns = 2,
    84         ns_s_ud = 2,
    85         ns_s_ar = 3,
    86         ns_s_max =4
    87 } ns_sect;
    88 
    89 typedef struct __ns_msg
    90 {
    91         const unsigned char* _msg;
    92         const unsigned char* _eom;
    93         guint16 _id;
    94         guint16 _flags;
    95         guint16 _counts[ns_s_max];
    96         const unsigned char* _sections[ns_s_max];
    97         ns_sect _sect;
    98         int _rrnum;
    99         const unsigned char* _msg_ptr;
    100 } ns_msg;
    101 
    102 typedef enum __ns_class {
    103         ns_c_invalid = 0,
    104         ns_c_in = 1,
    105         ns_c_2 = 2,
    106         ns_c_chaos = 3,
    107         ns_c_hs = 4,
    108         ns_c_none = 254,
    109         ns_c_any = 255,
    110         ns_c_max = 65536
    111 } ns_class;
    112 
    113 
    114 /* TODO : fill out the rest */
    115 typedef enum __ns_type {
    116         ns_t_srv = 33
    117 } ns_type;
    118 
    119 #endif /* NAMESER_HAS_NS_INITPARSE */
    120 
    12140G_MODULE_EXPORT void strip_linefeed( gchar *text );
    12241G_MODULE_EXPORT char *add_cr( char *text );
     
    14867G_MODULE_EXPORT gboolean ssl_sockerr_again( void *ssl );
    14968G_MODULE_EXPORT int md5_verify_password( char *password, char *hash );
    150 G_MODULE_EXPORT char **split_command_parts( char *command, int limit );
     69G_MODULE_EXPORT char **split_command_parts( char *command );
    15170G_MODULE_EXPORT char *get_rfc822_header( const char *text, const char *header, int len );
    15271
  • lib/proxy.c

    r5cb21d1 rc180110  
    2626#include <string.h>
    2727#include <sys/types.h>
     28#ifndef _WIN32
    2829#include <sys/socket.h>
    2930#include <netdb.h>
     
    3132#include <arpa/inet.h>
    3233#include <unistd.h>
     34#else
     35#include "sock.h"
     36#define ETIMEDOUT WSAETIMEDOUT
     37#define EINPROGRESS WSAEINPROGRESS
     38#endif
    3339#include <fcntl.h>
    3440#include <errno.h>
     
    7076        len = sizeof(error);
    7177       
     78#ifndef _WIN32
    7279        if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0 || error) {
    7380                if ((phb->gai_cur = phb->gai_cur->ai_next)) {
     
    94101                return FALSE;
    95102        }
     103#endif
    96104        freeaddrinfo(phb->gai);
    97105        sock_make_blocking(source);
  • lib/proxy.h

    r5cb21d1 rc180110  
    2828
    2929#include <sys/types.h>
     30#ifndef _WIN32
    3031#include <sys/socket.h>
    3132#include <netdb.h>
    3233#include <netinet/in.h>
     34#endif
    3335#include <glib.h>
    3436#include <gmodule.h>
  • lib/ssl_gnutls.c

    r5cb21d1 rc180110  
    236236static void ssl_cache_add( struct scd *conn )
    237237{
    238         size_t data_size = 0;
     238        size_t data_size;
    239239        struct ssl_session *data;
    240240        char *hostname;
     
    245245       
    246246        data = g_malloc( sizeof( struct ssl_session ) + data_size );
    247         if( gnutls_session_get_data( conn->session, data->data, &data_size ) != 0 )
     247        if( gnutls_session_get_data( conn->session, data->data, &data->size ) != 0 )
    248248        {
    249249                g_free( data );
     
    335335        int st, stver;
    336336       
    337         /* This function returns false, so avoid calling b_event_remove again */
    338         conn->inpa = -1;
    339        
    340337        if( ( st = gnutls_handshake( conn->session ) ) < 0 )
    341338        {
  • protocols/account.c

    r5cb21d1 rc180110  
    2727#include "bitlbee.h"
    2828#include "account.h"
    29 
    30 static const char* account_protocols_local[] = {
    31         "gg", NULL
    32 };
    3329
    3430static char *set_eval_nick_source( set_t *set, char *value );
     
    351347void account_on( bee_t *bee, account_t *a )
    352348{
    353         GHashTableIter nicks;
    354         gpointer k, v;
    355 
    356349        if( a->ic )
    357350        {
     
    367360        if( a->ic && !( a->ic->flags & ( OPT_SLOW_LOGIN | OPT_LOGGED_IN ) ) )
    368361                a->ic->keepalive = b_timeout_add( 120000, account_on_timeout, a->ic );
    369 
    370         if( a->flags & ACC_FLAG_LOCAL )
    371         {
    372                 g_hash_table_iter_init(&nicks, a->nicks);
    373                 while( g_hash_table_iter_next( &nicks, &k, &v ) )
    374                 {
    375                         a->prpl->add_buddy( a->ic, (char*) k, NULL );
    376                 }
    377         }
    378362}
    379363
     
    481465        return a->auto_reconnect_delay;
    482466}
    483 
    484 int protocol_account_islocal( const char* protocol )
    485 {
    486         const char** p = account_protocols_local;
    487         do {
    488                 if( strcmp( *p, protocol ) == 0 )
    489                         return 1;
    490         } while( *( ++p ) );
    491         return 0;
    492 }
  • protocols/account.h

    r5cb21d1 rc180110  
    5959int account_reconnect_delay( account_t *a );
    6060
    61 int protocol_account_islocal( const char* protocol );
    62 
    6361typedef enum
    6462{
     
    7270        ACC_FLAG_STATUS_MESSAGE = 0x02, /* Supports status messages (without being away). */
    7371        ACC_FLAG_HANDLE_DOMAINS = 0x04, /* Contact handles need a domain portion. */
    74         ACC_FLAG_LOCAL = 0x08,          /* Contact list is local. */
    7572} account_flag_t;
    7673
  • protocols/jabber/iq.c

    r5cb21d1 rc180110  
    352352                        /* Server is crap, but this is no disaster. */
    353353                }
    354                 else if( jabber_compare_jid( jd->me, c->text ) == 0 )
     354                else if( strncmp( jd->me, c->text, strlen( jd->me ) ) != 0 )
    355355                {
    356356                        s = strchr( c->text, '/' );
  • protocols/jabber/jabber.h

    r5cb21d1 rc180110  
    289289const struct jabber_away_state *jabber_away_state_by_name( char *name );
    290290void jabber_buddy_ask( struct im_connection *ic, char *handle );
    291 int jabber_compare_jid( const char *jid1, const char *jid2 );
    292291char *jabber_normalize( const char *orig );
    293292
  • protocols/jabber/jabber_util.c

    r5cb21d1 rc180110  
    306306        imcb_ask( ic, buf, bla, jabber_buddy_ask_yes, jabber_buddy_ask_no );
    307307        g_free( buf );
    308 }
    309 
    310 /* Compares just the bare portions of two Jabber IDs. */
    311 int jabber_compare_jid( const char *jid1, const char *jid2 )
    312 {
    313         int i;
    314        
    315         for( i = 0; ; i ++ )
    316         {
    317                 if( jid1[i] == '\0' || jid1[i] == '/' || jid2[i] == '\0' || jid2[i] == '/' )
    318                 {
    319                         if( ( jid1[i] == '\0' || jid1[i] == '/' ) && ( jid2[i] == '\0' || jid2[i] == '/' ) )
    320                                 break;
    321                         return FALSE;
    322                 }
    323                 if( tolower( jid1[i] ) != tolower( jid2[i] ) )
    324                 {
    325                         return FALSE;
    326                 }
    327         }
    328        
    329         return TRUE;
    330308}
    331309
  • protocols/msn/soap.h

    r5cb21d1 rc180110  
    3636#include <string.h>
    3737#include <sys/types.h>
     38#ifndef _WIN32
    3839#include <sys/socket.h>
    3940#include <netinet/in.h>
    4041#include <arpa/inet.h>
    4142#include <unistd.h>
     43#endif
    4244#include "nogaim.h"
    4345
  • protocols/oscar/rxqueue.c

    r5cb21d1 rc180110  
    99#include <aim.h>
    1010
     11#ifndef _WIN32
    1112#include <sys/socket.h>
     13#endif
    1214
    1315/*
  • protocols/oscar/txqueue.c

    r5cb21d1 rc180110  
    99#include "im.h"
    1010
     11#ifndef _WIN32
    1112#include <sys/socket.h>
     13#endif
    1214
    1315/*
  • protocols/twitter/twitter.c

    r5cb21d1 rc180110  
    323323        s = set_add(&acc->set, "show_ids", "true", set_eval_bool, acc);
    324324
    325         s = set_add(&acc->set, "show_old_mentions", "0", set_eval_int, acc);
     325        s = set_add(&acc->set, "show_old_mentions", "20", set_eval_int, acc);
    326326
    327327        s = set_add(&acc->set, "strip_newlines", "false", set_eval_bool, acc);
     
    602602
    603603        cmds = g_strdup(message);
    604         cmd = split_command_parts(cmds, 2);
     604        cmd = split_command_parts(cmds);
    605605
    606606        if (cmd[0] == NULL) {
     
    617617
    618618                goto eof;
    619         } else if ((g_strcasecmp(cmd[0], "favourite") == 0 ||
    620                     g_strcasecmp(cmd[0], "favorite") == 0 ||
    621                     g_strcasecmp(cmd[0], "fav") == 0) && cmd[1]) {
     619        } else if (g_strcasecmp(cmd[0], "favourite") == 0 && cmd[1]) {
    622620                if ((id = twitter_message_id_from_command_arg(ic, cmd[1], NULL))) {
    623621                        twitter_favourite_tweet(ic, id);
     
    664662                        goto eof;
    665663                }
    666                 message = new = g_strdup_printf("@%s %s", bu->handle, cmd[2]);
     664                message = new = g_strdup_printf("@%s %s", bu->handle, message + (cmd[2] - cmd[0]));
    667665                in_reply_to = id;
    668666                allow_post = TRUE;
  • protocols/yahoo/libyahoo2.c

    r5cb21d1 rc180110  
    4848 */
    4949
     50#ifndef _WIN32
    5051#include <unistd.h>
     52#endif
    5153#include <errno.h>
    5254#include <stdio.h>
  • protocols/yahoo/yahoo_httplib.c

    r5cb21d1 rc180110  
    3838
    3939#include <errno.h>
     40#ifndef _WIN32
    4041#include <unistd.h>
     42#endif
    4143#include <ctype.h>
    4244#include "yahoo2.h"
  • protocols/yahoo/yahoo_util.h

    r5cb21d1 rc180110  
    6565void y_strfreev(char **vector);
    6666
     67#ifndef _WIN32
    6768int strncasecmp(const char *s1, const char *s2, size_t n);
    6869int strcasecmp(const char *s1, const char *s2);
     
    7273int snprintf(char *str, size_t size, const char *format, ...);
    7374int vsnprintf(char *str, size_t size, const char *format, va_list ap);
     75#endif
    7476
    7577#endif
  • root_commands.c

    r5cb21d1 rc180110  
    3232void root_command_string( irc_t *irc, char *command )
    3333{
    34         root_command( irc, split_command_parts( command, 0 ) );
     34        root_command( irc, split_command_parts( command ) );
    3535}
    3636
     
    10851085static void cmd_blist( irc_t *irc, char **cmd )
    10861086{
    1087         int online = 0, away = 0, offline = 0, ismatch = 0;
     1087        int online = 0, away = 0, offline = 0;
    10881088        GSList *l;
    1089         GRegex *regex = NULL;
    1090         GError *error = NULL;
    10911089        char s[256];
    10921090        char *format;
     
    11041102                online = away = 1;
    11051103       
    1106         if( cmd[2] )
    1107                 regex = g_regex_new( cmd[2], G_REGEX_CASELESS, 0, &error );
    1108        
    1109         if( error )
    1110         {
    1111                 irc_rootmsg( irc, error->message );
    1112                 g_error_free( error );
    1113         }
    1114        
    11151104        if( strchr( irc->umode, 'b' ) != NULL )
    11161105                format = "%s\t%s\t%s";
     
    11291118                bee_user_t *bu = iu->bu;
    11301119               
    1131                 if( !regex || g_regex_match( regex, iu->nick, 0, NULL ) )
    1132                         ismatch = 1;
    1133                 else
    1134                         ismatch = 0;
    1135                
    1136                 if( !bu || ( irc->root->last_channel && !irc_channel_wants_user( irc->root->last_channel, iu ) ) )
     1120                if( !bu || ( irc->root->last_channel && !irc_channel_wants_user( irc->root->last_channel, iu ) ) ||
     1121                    ( bu->flags & ( BEE_USER_ONLINE | BEE_USER_AWAY ) ) != BEE_USER_ONLINE )
    11371122                        continue;
    11381123               
    1139                 if( ( bu->flags & ( BEE_USER_ONLINE | BEE_USER_AWAY ) ) == BEE_USER_ONLINE )
    1140                 {
    1141                         if( ismatch == 1 && online == 1 )
    1142                         {
    1143                                 char st[256] = "Online";
    1144                                
    1145                                 if( bu->status_msg )
    1146                                         g_snprintf( st, sizeof( st ) - 1, "Online (%s)", bu->status_msg );
    1147                                
    1148                                 g_snprintf( s, sizeof( s ) - 1, "%s %s", bu->handle, bu->ic->acc->tag );
    1149                                 irc_rootmsg( irc, format, iu->nick, s, st );
    1150                         }
     1124                if( online == 1 )
     1125                {
     1126                        char st[256] = "Online";
    11511127                       
    1152                         n_online ++;
    1153                 }
    1154                
    1155                 if( ( bu->flags & BEE_USER_ONLINE ) && ( bu->flags & BEE_USER_AWAY ) )
    1156                 {
    1157                         if( ismatch == 1 && away == 1 )
    1158                         {
    1159                                 g_snprintf( s, sizeof( s ) - 1, "%s %s", bu->handle, bu->ic->acc->tag );
    1160                                 irc_rootmsg( irc, format, iu->nick, s, irc_user_get_away( iu ) );
    1161                         }
    1162                         n_away ++;
    1163                 }
    1164                
    1165                 if( !(bu->flags & BEE_USER_ONLINE) )
    1166                 {
    1167                         if( ismatch == 1 && offline == 1 )
    1168                         {
    1169                                 g_snprintf( s, sizeof( s ) - 1, "%s %s", bu->handle, bu->ic->acc->tag );
    1170                                 irc_rootmsg( irc, format, iu->nick, s, "Offline" );
    1171                         }
    1172                         n_offline ++;
    1173                 }
     1128                        if( bu->status_msg )
     1129                                g_snprintf( st, sizeof( st ) - 1, "Online (%s)", bu->status_msg );
     1130                       
     1131                        g_snprintf( s, sizeof( s ) - 1, "%s %s", bu->handle, bu->ic->acc->tag );
     1132                        irc_rootmsg( irc, format, iu->nick, s, st );
     1133                }
     1134               
     1135                n_online ++;
     1136        }
     1137
     1138        for( l = irc->users; l; l = l->next )
     1139        {
     1140                irc_user_t *iu = l->data;
     1141                bee_user_t *bu = iu->bu;
     1142               
     1143                if( !bu || ( irc->root->last_channel && !irc_channel_wants_user( irc->root->last_channel, iu ) ) ||
     1144                    !( bu->flags & BEE_USER_ONLINE ) || !( bu->flags & BEE_USER_AWAY ) )
     1145                        continue;
     1146               
     1147                if( away == 1 )
     1148                {
     1149                        g_snprintf( s, sizeof( s ) - 1, "%s %s", bu->handle, bu->ic->acc->tag );
     1150                        irc_rootmsg( irc, format, iu->nick, s, irc_user_get_away( iu ) );
     1151                }
     1152                n_away ++;
     1153        }
     1154       
     1155        for( l = irc->users; l; l = l->next )
     1156        {
     1157                irc_user_t *iu = l->data;
     1158                bee_user_t *bu = iu->bu;
     1159               
     1160                if( !bu || ( irc->root->last_channel && !irc_channel_wants_user( irc->root->last_channel, iu ) ) ||
     1161                    bu->flags & BEE_USER_ONLINE )
     1162                        continue;
     1163               
     1164                if( offline == 1 )
     1165                {
     1166                        g_snprintf( s, sizeof( s ) - 1, "%s %s", bu->handle, bu->ic->acc->tag );
     1167                        irc_rootmsg( irc, format, iu->nick, s, "Offline" );
     1168                }
     1169                n_offline ++;
    11741170        }
    11751171       
    11761172        irc_rootmsg( irc, "%d buddies (%d available, %d away, %d offline)", n_online + n_away + n_offline, n_online, n_away, n_offline );
    1177        
    1178         if( regex )
    1179                 g_regex_unref( regex );
    11801173}
    11811174
  • sock.h

    r5cb21d1 rc180110  
    22#include <fcntl.h>
    33
     4#ifndef _WIN32
    45#include <unistd.h>
    56#include <sys/socket.h>
     
    1112#define sockerr_again() (errno == EINPROGRESS || errno == EINTR)
    1213void closesocket( int fd );
     14#else
     15# include <winsock2.h>
     16# include <ws2tcpip.h>
     17# if !defined(BITLBEE_CORE) && defined(_MSC_VER)
     18#   pragma comment(lib,"bitlbee.lib")
     19# endif
     20# include <io.h>
     21# define sock_make_nonblocking(fd) { int non_block = 1; ioctlsocket(fd, FIONBIO, &non_block); }
     22# define sock_make_blocking(fd) { int non_block = 0; ioctlsocket(fd, FIONBIO, &non_block); }
     23# define sockerr_again() (WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK)
     24# define ETIMEDOUT WSAETIMEDOUT
     25# define sleep(a) Sleep(a*1000)
     26#endif
  • storage_xml.c

    r5cb21d1 rc180110  
    8787        char *pass_b64 = NULL;
    8888        unsigned char *pass_cr = NULL;
    89         int pass_len, local = 0;
     89        int pass_len;
    9090        struct prpl *prpl = NULL;
    9191        account_t *acc;
     
    100100        protocol = xt_find_attr( node, "protocol" );
    101101        if( protocol )
    102         {
    103102                prpl = find_protocol( protocol );
    104                 local = protocol_account_islocal( protocol );
    105         }
    106103       
    107104        if( !handle || !pass_b64 || !protocol || !prpl )
     
    117114                if( tag )
    118115                        set_setstr( &acc->set, "tag", tag );
    119                 if( local )
    120                         acc->flags |= ACC_FLAG_LOCAL;
    121116        }
    122117        else
  • tests/check_jabber_util.c

    r5cb21d1 rc180110  
    9595}
    9696
    97 static void check_compareJID(int l)
    98 {
    99         fail_unless( jabber_compare_jid( "bugtest@google.com/B", "bugtest@google.com/A" ) );
    100         fail_if( jabber_compare_jid( "bugtest1@google.com/B", "bugtest@google.com/A" ) );
    101         fail_if( jabber_compare_jid( "bugtest@google.com/B", "bugtest1@google.com/A" ) );
    102         fail_if( jabber_compare_jid( "bugtest1@google.com/B", "bugtest2@google.com/A" ) );
    103         fail_unless( jabber_compare_jid( "bugtest@google.com/A", "bugtest@google.com/A" ) );
    104         fail_if( jabber_compare_jid( "", "bugtest@google.com/A" ) );
    105 }
    106 
    10797Suite *jabber_util_suite (void)
    10898{
     
    120110        suite_add_tcase (s, tc_core);
    121111        tcase_add_test (tc_core, check_buddy_add);
    122         tcase_add_test (tc_core, check_compareJID);
    123112        return s;
    124113}
  • tests/check_util.c

    r5cb21d1 rc180110  
    169169END_TEST
    170170
    171 struct {
    172         int limit;
    173         char *command;
    174         char *expected[IRC_MAX_ARGS+1];
    175 } split_tests[] = {
    176         {
    177                 0, "account add etc \"user name with spaces\" 'pass\\ word'",
    178                 {"account", "add", "etc", "user name with spaces", "pass\\ word", NULL},
    179         },
    180         {
    181                 0, "channel set group Close\\ friends",
    182                 {"channel", "set", "group", "Close friends", NULL},
    183         },
    184         {
    185                 2, "reply wilmer \"testing in C is a PITA\", you said.",
    186                 {"reply", "wilmer", "\"testing in C is a PITA\", you said.", NULL},
    187         },
    188         {
    189                 4, "one space  two  spaces  limit  limit",
    190                 {"one", "space", "two", "spaces", "limit  limit", NULL},
    191         },
    192         {
    193                 0, NULL,
    194                 {NULL}
    195         },
    196 };
    197 
    198 START_TEST(test_split_command_parts)
    199         int i;
    200         for (i = 0; split_tests[i].command; i++) {
    201                 char *cmd = g_strdup(split_tests[i].command);
    202                 char **split = split_command_parts(cmd, split_tests[i].limit);
    203                 char **expected = split_tests[i].expected;
    204 
    205                 int j;
    206                 for (j = 0; split[j] && expected[j]; j++) {
    207                         fail_unless (strcmp(split[j], expected[j]) == 0,
    208                                 "(%d) split_command_parts broken: split(\"%s\")[%d] -> %s (expected: %s)",
    209                                 i, split_tests[i].command, j, split[j], expected[j]);
    210                 }
    211                 g_free(cmd);
    212         }
    213 END_TEST
    214 
    215171Suite *util_suite (void)
    216172{
     
    227183        tcase_add_test (tc_core, test_word_wrap);
    228184        tcase_add_test (tc_core, test_http_encode);
    229         tcase_add_test (tc_core, test_split_command_parts);
    230185        return s;
    231186}
  • unix.c

    r5cb21d1 rc180110  
    3232#include "help.h"
    3333#include "ipc.h"
     34#include "lib/ssl_client.h"
    3435#include "md5.h"
    3536#include "misc.h"
     
    8182#endif
    8283       
     84        /* Ugly Note: libotr and gnutls both use libgcrypt. libgcrypt
     85           has a process-global config state whose initialization happpens
     86           twice if libotr and gnutls are used together. libotr installs custom
     87           memory management functions for libgcrypt while our gnutls module
     88           uses the defaults. Therefore we initialize OTR after SSL. *sigh* */
     89        ssl_init();
    8390#ifdef OTR_BI
    8491        otr_init();
    8592#endif
     93        /* And in case OTR is loaded as a plugin, it'll also get loaded after
     94           this point. */
    8695       
    8796        srand( time( NULL ) ^ getpid() );
Note: See TracChangeset for help on using the changeset viewer.