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

📄 message.c

📁 linux下的飞鸽传书 日本人设计 使用非常方便
💻 C
字号:
#include <stdio.h>#include <errno.h>#include <string.h>#include <sys/time.h>#include <iconv.h>#include "common.h"#define UNKNOWN_NAME _("UnKnown")#define TO_CODE_SET "UTF-8"#define IPMSG_CODE_SET "SHIFT-JIS"#define FROM_CODE_SET IPMSG_CODE_SETconst char *refer_user_name_from_msg(const msg_data_t *msg){  if (!msg)    return UNKNOWN_NAME;  return (msg->username)?(msg->username):(UNKNOWN_NAME);}const char *refer_host_name_from_msg(const msg_data_t *msg){  if (!msg)    return UNKNOWN_NAME;  return (msg->hostname)?(msg->hostname):(UNKNOWN_NAME);}const char *refer_nick_name_from_msg(const msg_data_t *msg){  if (!msg)    return UNKNOWN_NAME;  return (msg->message)?(msg->message):(UNKNOWN_NAME);}const char *refer_group_name_from_msg(const msg_data_t *msg){  if (!msg)    return UNKNOWN_NAME;  return (msg->extstring)?(msg->extstring):(UNKNOWN_NAME);}intrefer_pkt_no_name_from_msg(const msg_data_t *msg){  return msg->pkt_seq_no;}intinit_message_data(msg_data_t *msg){  if (!msg)    return -EINVAL;  memset(msg,0,sizeof(msg_data_t));  msg->magic=IPMSG_MSG_MAGIC;  return 0;}intrelease_message_data(msg_data_t *msg){  if ( (!msg) || (msg->magic!= IPMSG_MSG_MAGIC) )    return -EINVAL;    if (msg->username)    free(msg->username);  if (msg->hostname)    free(msg->hostname);  if (msg->extstring)    free(msg->extstring);  if (msg->message)    free(msg->message);  msg->magic=0;  return 0;}intparse_message(msg_data_t *msg,const char *message_buff,size_t len){  long int_val;  char *sp=NULL;  char *ep=NULL;  char *buffer;  ssize_t remains;  int rc=0;  if  ( (!message_buff) || (!msg)  || (msg->magic!= IPMSG_MSG_MAGIC) )    return -EINVAL;  _assert(len>0);  buffer=malloc(len);  if (!buffer)    return -ENOMEM;  gettimeofday(&msg->tv, NULL);  memcpy(buffer,message_buff,len);  remains=len;  /*   * バージョン番号      */  sp=buffer;  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  *ep='\0';  remains =len - ((unsigned long)ep-(unsigned long)buffer);  if (remains<=0) {    rc=-EINVAL;    goto err_out;  }  ++ep;  int_val=strtol(sp, (char **)NULL, 10);  msg->version=int_val;  dbg_out("Version:%d\n",msg->version);  sp=ep;  /*   * シーケンス番号      */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  *ep='\0';  remains =len - ((unsigned long)ep-(unsigned long)buffer);  if (remains<=0) {    rc=-EINVAL;    goto err_out;  }  ++ep;  int_val=strtol(sp, (char **)NULL, 10);  msg->pkt_seq_no=int_val;  dbg_out("pkt_no:%d(%x)\n",msg->pkt_seq_no,msg->pkt_seq_no);  sp=ep;  /*   * 名前   */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  *ep='\0';  remains =len - ((unsigned long)ep-(unsigned long)buffer);  if (remains<=0) {    rc=-EINVAL;    goto err_out;  }  ++ep;  msg->username=strdup(sp);  dbg_out("Name:%s\n",msg->username);  sp=ep;  /*   * ホスト名   */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  *ep='\0';  remains =len - ((unsigned long)ep-(unsigned long)buffer);  if (remains<=0) {    rc=-EINVAL;    goto err_out;  }  ++ep;  msg->hostname=strdup(sp);  dbg_out("Host:%s\n",msg->hostname);  sp=ep;  /*   * コマンド番号      */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  *ep='\0';  ++ep;  int_val=strtol(sp, (char **)NULL, 10);  msg->command=(int_val & 0xff);  msg->command_opts=(int_val & ~0xffUL);  dbg_out("Command:0x%x Option:0x%x\n",msg->command,msg->command_opts);  sp=ep;  /*   *メッセージ本文   */  msg->message=strdup(sp);  dbg_out("body:%s\n",msg->message);  /*   *拡張部   */  ep=memchr(sp, '\0', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  if ( ((unsigned long)ep - (unsigned long)buffer) < len) {    ++ep;    sp=ep;    msg->extstring=strdup(sp);    dbg_out("extention:%s\n",msg->extstring);  }err_out:  free(buffer);  return rc;}

⌨️ 快捷键说明

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