⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsers.c

📁 C语言实现的简易的NNTP Client源代码
💻 C
字号:
/* *  Embedded NNTP Message Parsers * *  ./software/ch11/emnntp/parsers.c * *  mtj@cogitollc.com * */#include <string.h>#include "emnntp.h"/* *  parseEntry() * *  The parseEntry function takes a 'news' structure and searches for *  the 'searchString' in the message headers.  The headers have the *  form 'XXX: YYY' where XXX is the keyword and YYY is the value for  *  the keyword.  When the keyword is found, the value is stored in *  'dest'. * *  This function returns 0 on success, -1 on error. * */int parseEntry( news_t *news, const char *searchString, char *dest ){  int i, index, len;  if ((!news) || (!dest) || (!searchString)) return -1;  len = strlen(searchString);  /* Grab the value for the searchString */  for (i = 0 ; i < news->msgLen ; i++) {    if (news->msg[i] == searchString[0]) {      if (!strncmp(&news->msg[i], searchString, len )) {        i += (len + 1);        index = 0;        while (!((news->msg[i] == 0x0d) && (news->msg[i+1] == 0x0a))) {          if (news->msg[i] == 0) i++;          else dest[index++] = news->msg[i++];        }        dest[index] = 0;        break;      }    }  }  if (i == news->msgLen) {    return -1;  }  return 0;}/* *  fixAddress() * *  The fixAddress function takes an email address in the form: * *    <xxx@yyy.zzz> and transforms it to xxx@yyy.zzz * *  The function returns -1 on error, 0 on success. * */int fixAddress ( char *address ){  int i, j, len;  char string[MAX_STRING+1];  if (!address) return -1;  len = strlen(address);  for (i = 0 ; i < len ; i++) {    if (address[i] == '<') break;  }  if (i++ == len) return 0;  j = 0;  for ( ; i < len ; i++) {    if (address[i] == '>') break;    string[j++] = address[i];  }  string[j] = 0;  strcpy(address, string);  return 0;}/* *  findBody() * *  The findBody function finds the body of the message within the entire *  'news' message.  The body in this case excludes all headers and begins *  after the blank line after the news headers. * *  Returns 0 on success, -1 on error. * */int findBody( news_t *news ){  int i, result=-1;  for (i = 0 ; i < news->msgLen ; i++) {    if ((news->msg[i] == 0x0d) && (news->msg[i+1] == 0x0a) &&        (news->msg[i+2] == 0x0d) && (news->msg[i+3] == 0x0a)) {      i+=4;      break;    }  }  if (i < news->msgLen) {    news->bodyStart = &news->msg[i];    result = 0;  }  return result;}/* *  Copyright (c) 2002 Charles River Media.  All rights reserved. *  *  Redistribution and use in source and binary forms, with or  *  without modification, is hereby granted without fee provided  *  that the following conditions are met: *  *    1.  Redistributions of source code must retain the above  *        copyright notice, this list of conditions and the  *        following disclaimer. *    2.  Redistributions in binary form must reproduce the above *        copyright notice, this list of conditions and the  *        following disclaimer in the documentation and/or other  *        materials provided with the distribution. *    3.  Neither the name of Charles River Media nor the names of  *        its contributors may be used to endorse or promote products  *        derived from this software without specific prior  *        written permission. *  * THIS SOFTWARE IS PROVIDED BY CHARLES RIVER MEDIA AND CONTRIBUTERS  * 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CHARLES * RIVER MEDIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  * INCIDENTAL, SPECIAL, EXEMPLARAY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -