Annotation of sbbs/src/xpdev/netwrap.c, revision 1.1

1.1     ! root        1: /* netwrap.c */
        !             2: 
        !             3: /* Network related wrapper functions */
        !             4: 
        !             5: /* $Id: netwrap.c,v 1.1 2005/10/07 06:23:15 rswindell Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2005 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This library is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU Lesser General Public License          *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU Lesser General Public License for more details: lgpl.txt or     *
        !            18:  * http://www.fsf.org/copyleft/lesser.html                                                                     *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: #include "genwrap.h"   /* truncsp */
        !            39: #include "netwrap.h"   /* verify prototypes */
        !            40: 
        !            41: #include <stdlib.h>            /* malloc() */
        !            42: 
        !            43: #if defined(_WIN32)
        !            44:        #include <iphlpapi.h>   /* GetNetworkParams */
        !            45: #endif
        !            46: 
        !            47: str_list_t getNameServerList(void)
        !            48: {
        !            49: #ifdef __unix__        /* Look up DNS server address */
        !            50:        FILE*   fp;
        !            51:        char*   p;
        !            52:        char    str[128];
        !            53:        str_list_t      list;
        !            54: 
        !            55:        if((list=strListInit())==NULL)
        !            56:                return(NULL);
        !            57:        if((fp=fopen("/etc/resolv.conf","r"))!=NULL) {
        !            58:                while(!feof(fp)) {
        !            59:                        if(fgets(str,sizeof(str),fp)==NULL)
        !            60:                                break;
        !            61:                        truncsp(str);
        !            62:                        p=str;
        !            63:                        SKIP_WHITESPACE(p);
        !            64:                        if(strnicmp(p,"nameserver",10)!=0) /* no match */
        !            65:                                continue;
        !            66:                        FIND_WHITESPACE(p);     /* skip "nameserver" */
        !            67:                        SKIP_WHITESPACE(p);     /* skip more white-space */
        !            68:                        strListPush(&list,p);
        !            69:                }
        !            70:                fclose(fp);
        !            71:        }
        !            72:        return(list);
        !            73: 
        !            74: #elif defined(_WIN32)
        !            75:        FIXED_INFO* FixedInfo=NULL;
        !            76:        ULONG           FixedInfoLen=0;
        !            77:        IP_ADDR_STRING* ip;
        !            78:        str_list_t      list;
        !            79: 
        !            80:        if((list=strListInit())==NULL)
        !            81:                return(NULL);
        !            82:        if(GetNetworkParams(FixedInfo,&FixedInfoLen) == ERROR_BUFFER_OVERFLOW) {
        !            83:         FixedInfo=(FIXED_INFO*)malloc(FixedInfoLen);
        !            84:                if(GetNetworkParams(FixedInfo,&FixedInfoLen) == ERROR_SUCCESS) {
        !            85:                        ip=&FixedInfo->DnsServerList;
        !            86:                        for(; ip!=NULL; ip=ip->Next)
        !            87:                                strListPush(&list,ip->IpAddress.String);
        !            88:                }
        !            89:         if(FixedInfo!=NULL)
        !            90:             free(FixedInfo);
        !            91:     }
        !            92:        return(list);
        !            93: #else
        !            94:        #error "Need a get_nameserver() implementation for this platform"
        !            95: #endif
        !            96: }
        !            97: 
        !            98: /* In case we want to DLL-export getNameServerList in the future */
        !            99: void freeNameServerList(str_list_t list)
        !           100: {
        !           101:        strListFree(&list);
        !           102: }
        !           103: 
        !           104: #if NETWRAP_TEST
        !           105: int main(void)
        !           106: {
        !           107:        size_t          i;
        !           108:        str_list_t      list;
        !           109: 
        !           110:        if((list=getNameServerList())!=NULL) {
        !           111:                for(i=0;list[i]!=NULL;i++)
        !           112:                        printf("%s\n",list[i]);
        !           113:                freeNameServerList(list);
        !           114:        }
        !           115: 
        !           116:        return 0;
        !           117: }
        !           118: #endif
        !           119: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.