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

📄 mtest.c

📁 Vovida 社区开源的 SIP 协议源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  unsigned long msgno = mail_msgno (stream,uid);  MESSAGECACHE *elt = mail_elt (stream,msgno);  MESSAGECACHE selt;  tmp[0] = elt->recent ? (elt->seen ? 'R': 'N') : ' ';  tmp[1] = (elt->recent | elt->seen) ? ' ' : 'U';  tmp[2] = elt->flagged ? 'F' : ' ';  tmp[3] = elt->answered ? 'A' : ' ';  tmp[4] = elt->deleted ? 'D' : ' ';  mail_parse_date (&selt,ov->date);  sprintf (tmp+5,"%4lu) ",elt->msgno);  mail_date (tmp+11,&selt);  tmp[17] = ' ';  tmp[18] = '\0';  memset (tmp+18,' ',(size_t) 20);  tmp[38] = '\0';		/* tie off with null */				/* get first from address from envelope */  for (adr = ov->from; adr && !adr->host; adr = adr->next);  if (adr) {			/* if a personal name exists use it */    if (!(t = adr->personal))      sprintf (t = tmp+400,"%s@%s",adr->mailbox,adr->host);    memcpy (tmp+18,t,(size_t) min (20,(long) strlen (t)));  }  strcat (tmp," ");  if (i = elt->user_flags) {    strcat (tmp,"{");    while (i) {      strcat (tmp,stream->user_flags[find_rightmost_bit (&i)]);      if (i) strcat (tmp," ");    }    strcat (tmp,"} ");  }  sprintf (tmp + strlen (tmp),"%.25s (%lu chars)",	   ov->subject ? ov->subject : " ",ov->optional.octets);  puts (tmp);}/* MM display header * Accepts: IMAP2 stream *	    message number */void header (MAILSTREAM *stream,long msgno){  unsigned long i;  char tmp[MAILTMPLEN];  char *t;  MESSAGECACHE *cache = mail_elt (stream,msgno);  mail_fetchstructure (stream,msgno,NIL);  tmp[0] = cache->recent ? (cache->seen ? 'R': 'N') : ' ';  tmp[1] = (cache->recent | cache->seen) ? ' ' : 'U';  tmp[2] = cache->flagged ? 'F' : ' ';  tmp[3] = cache->answered ? 'A' : ' ';  tmp[4] = cache->deleted ? 'D' : ' ';  sprintf (tmp+5,"%4lu) ",cache->msgno);  mail_date (tmp+11,cache);  tmp[17] = ' ';  tmp[18] = '\0';  mail_fetchfrom (tmp+18,stream,msgno,(long) 20);  strcat (tmp," ");  if (i = cache->user_flags) {    strcat (tmp,"{");    while (i) {      strcat (tmp,stream->user_flags[find_rightmost_bit (&i)]);      if (i) strcat (tmp," ");    }    strcat (tmp,"} ");  }  mail_fetchsubject (t = tmp + strlen (tmp),stream,msgno,(long) 25);  sprintf (t += strlen (t)," (%lu chars)",cache->rfc822_size);  puts (tmp);}/* MM display body * Accepts: BODY structure pointer *	    prefix string *	    index */void display_body (BODY *body,char *pfx,long i){  char tmp[MAILTMPLEN];  char *s = tmp;  PARAMETER *par;  PART *part;			/* multipart doesn't have a row to itself */  if (body->type == TYPEMULTIPART) {				/* if not first time, extend prefix */    if (pfx) sprintf (tmp,"%s%ld.",pfx,++i);    else tmp[0] = '\0';    for (i = 0,part = body->nested.part; part; part = part->next)      display_body (&part->body,tmp,i++);  }  else {			/* non-multipart, output oneline descriptor */    if (!pfx) pfx = "";		/* dummy prefix if top level */    sprintf (s," %s%ld %s",pfx,++i,body_types[body->type]);    if (body->subtype) sprintf (s += strlen (s),"/%s",body->subtype);    if (body->description) sprintf (s += strlen (s)," (%s)",body->description);    if (par = body->parameter) do      sprintf (s += strlen (s),";%s=%s",par->attribute,par->value);    while (par = par->next);    if (body->id) sprintf (s += strlen (s),", id = %s",body->id);    switch (body->type) {	/* bytes or lines depending upon body type */    case TYPEMESSAGE:		/* encapsulated message */    case TYPETEXT:		/* plain text */      sprintf (s += strlen (s)," (%lu lines)",body->size.lines);      break;    default:      sprintf (s += strlen (s)," (%lu bytes)",body->size.bytes);      break;    }    puts (tmp);			/* output this line */				/* encapsulated message? */    if ((body->type == TYPEMESSAGE) && !strcmp (body->subtype,"RFC822") &&	(body = body->nested.msg->body)) {      if (body->type == TYPEMULTIPART) display_body (body,pfx,i-1);      else {			/* build encapsulation prefix */	sprintf (tmp,"%s%ld.",pfx,i);	display_body (body,tmp,(long) 0);      }    }  }}/* MM status report * Accepts: MAIL stream */void status (MAILSTREAM *stream){  long i;  char date[MAILTMPLEN];  rfc822_date (date);  puts (date);  if (stream) {    if (stream->mailbox)      printf (" %s mailbox: %s, %lu messages, %lu recent\n",	      stream->dtb->name,stream->mailbox,stream->nmsgs,stream->recent);    else puts ("%No mailbox is open on this stream");    if (stream->user_flags[0]) {      printf ("Keywords: %s",stream->user_flags[0]);      for (i = 1; i < NUSERFLAGS && stream->user_flags[i]; ++i)	printf (", %s",stream->user_flags[i]);      puts ("");    }  }}/* Prompt user for input * Accepts: pointer to prompt message *          pointer to input buffer */void prompt (char *msg,char *txt){  printf ("%s",msg);  gets (txt);}/* Interfaces to C-client */void mm_searched (MAILSTREAM *stream,unsigned long number){}void mm_exists (MAILSTREAM *stream,unsigned long number){}void mm_expunged (MAILSTREAM *stream,unsigned long number){}void mm_flags (MAILSTREAM *stream,unsigned long number){}void mm_notify (MAILSTREAM *stream,char *string,long errflg){  mm_log (string,errflg);}void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes){  putchar (' ');  if (delimiter) putchar (delimiter);  else fputs ("NIL",stdout);  putchar (' ');  fputs (mailbox,stdout);  if (attributes & LATT_NOINFERIORS) fputs (", no inferiors",stdout);  if (attributes & LATT_NOSELECT) fputs (", no select",stdout);  if (attributes & LATT_MARKED) fputs (", marked",stdout);  if (attributes & LATT_UNMARKED) fputs (", unmarked",stdout);  putchar ('\n');}void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes){  putchar (' ');  if (delimiter) putchar (delimiter);  else fputs ("NIL",stdout);  putchar (' ');  fputs (mailbox,stdout);  if (attributes & LATT_NOINFERIORS) fputs (", no inferiors",stdout);  if (attributes & LATT_NOSELECT) fputs (", no select",stdout);  if (attributes & LATT_MARKED) fputs (", marked",stdout);  if (attributes & LATT_UNMARKED) fputs (", unmarked",stdout);  putchar ('\n');}void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status){  printf (" Mailbox %s",mailbox);  if (status->flags & SA_MESSAGES) printf (", %lu messages",status->messages);  if (status->flags & SA_RECENT) printf (", %lu recent",status->recent);  if (status->flags & SA_UNSEEN) printf (", %lu unseen",status->unseen);  if (status->flags & SA_UIDVALIDITY) printf (", %lu UID validity",					      status->uidvalidity);  if (status->flags & SA_UIDNEXT) printf (", %lu next UID",status->uidnext);  printf ("\n");}void mm_log (char *string,long errflg){  switch ((short) errflg) {  case NIL:    printf ("[%s]\n",string);    break;  case PARSE:  case WARN:    printf ("%%%s\n",string);    break;  case ERROR:    printf ("?%s\n",string);    break;  }}void mm_dlog (char *string){  puts (string);}void mm_login (NETMBX *mb,char *user,char *pwd,long trial){  char tmp[MAILTMPLEN];  if (curhst) fs_give ((void **) &curhst);  curhst = (char *) fs_get (1+strlen (mb->host));  strcpy (curhst,mb->host);  if (*mb->user) {    strcpy (user,mb->user);    sprintf (tmp,"{%s/%s/user=\"%s\"} password: ",mb->host,mb->service,mb->user);  }  else {    sprintf (tmp,"{%s/%s} username: ",mb->host,mb->service);    prompt (tmp,user);    strcpy (tmp,"Password: ");  }  if (curusr) fs_give ((void **) &curusr);  curusr = cpystr (user);#if UNIXLIKE  strcpy (pwd,getpass (tmp));#else  prompt (tmp,pwd);#endif    mm_dlog(user);    mm_dlog(pwd);}void mm_critical (MAILSTREAM *stream){}void mm_nocritical (MAILSTREAM *stream){}long mm_diskerror (MAILSTREAM *stream,long errcode,long serious){#if UNIXLIKE  kill (getpid (),SIGSTOP);#else  abort ();#endif  return NIL;}void mm_fatal (char *string){  printf ("?%s\n",string);}/* SMTP tester */void smtptest (long debug){  SENDSTREAM *stream = NIL;  char line[MAILTMPLEN];  char *text = (char *) fs_get (8*MAILTMPLEN);  ENVELOPE *msg = mail_newenvelope ();  BODY *body = mail_newbody ();  msg->from = mail_newaddr ();  msg->from->personal = cpystr (personalname);  msg->from->mailbox = cpystr (curusr);  msg->from->host = cpystr (curhst);  msg->return_path = mail_newaddr ();  msg->return_path->mailbox = cpystr (curusr);  msg->return_path->host = cpystr (curhst);  prompt ("To: ",line);  rfc822_parse_adrlist (&msg->to,line,curhst);  if (msg->to) {    prompt ("cc: ",line);    rfc822_parse_adrlist (&msg->cc,line,curhst);  }  else {    prompt ("Newsgroups: ",line);    if (*line) msg->newsgroups = cpystr (line);    else {      mail_free_body (&body);      mail_free_envelope (&msg);      fs_give ((void **) &text);    }  }  prompt ("Subject: ",line);  msg->subject = cpystr (line);  puts (" Msg (end with a line with only a '.'):");  body->type = TYPETEXT;  *text = '\0';  while (gets (line)) {    if (line[0] == '.') {      if (line[1] == '\0') break;      else strcat (text,".");    }    strcat (text,line);    strcat (text,"\015\012");  }  body->contents.text.data = (unsigned char *) text;  body->contents.text.size = strlen (text);  rfc822_date (line);  msg->date = (char *) fs_get (1+strlen (line));  strcpy (msg->date,line);  if (msg->to) {    puts ("Sending...");    if (stream = smtp_open (hostlist,debug)) {      if (smtp_mail (stream,"MAIL",msg,body)) puts ("[Ok]");      else printf ("[Failed - %s]\n",stream->reply);    }  }  else {    puts ("Posting...");    if (stream = nntp_open (newslist,debug)) {      if (nntp_mail (stream,msg,body)) puts ("[Ok]");      else printf ("[Failed - %s]\n",stream->reply);    }  }  if (stream) smtp_close (stream);  else puts ("[Can't open connection to any server]");  mail_free_envelope (&msg);  mail_free_body (&body);}

⌨️ 快捷键说明

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