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

📄 remailer.c

📁 mutt-1.5.12 源代码。linux 下邮件接受的工具。
💻 C
📖 第 1 页 / 共 2 页
字号:
  int optional = (flags & M_FORMAT_OPTIONAL);  switch (op)  {    case 'n':      if (!optional)      {	snprintf (fmt, sizeof (fmt), "%%%sd", prefix);	snprintf (dest, destlen, fmt, remailer->num);      }      break;    case 'c':      if (!optional)      {	snprintf (fmt, sizeof (fmt), "%%%ss", prefix);	snprintf (dest, destlen, fmt, mix_format_caps(remailer));      }      break;    case 's':      if (!optional)      {	snprintf (fmt, sizeof (fmt), "%%%ss", prefix);	snprintf (dest, destlen, fmt, NONULL(remailer->shortname));      }      else if (!remailer->shortname)        optional = 0;      break;    case 'a':      if (!optional)      {	snprintf (fmt, sizeof (fmt), "%%%ss", prefix);	snprintf (dest, destlen, fmt, NONULL(remailer->addr));      }      else if (!remailer->addr)        optional = 0;      break;        default:      *dest = '\0';  }  if (optional)    mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);  else if (flags & M_FORMAT_OPTIONAL)    mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);  return (src);}  static void mix_entry (char *b, size_t blen, MUTTMENU *menu, int num){  REMAILER **type2_list = (REMAILER **) menu->data;  mutt_FormatString (b, blen, NONULL (MixEntryFormat), mix_entry_fmt,		     (unsigned long) type2_list[num], M_FORMAT_ARROWCURSOR);}static int mix_chain_add (MIXCHAIN *chain, const char *s, 			  REMAILER **type2_list){  int i;    if (chain->cl >= MAXMIXES)    return -1;    if (!mutt_strcmp (s, "0") || !ascii_strcasecmp (s, "<random>"))  {    chain->ch[chain->cl++] = 0;    return 0;  }  for (i = 0; type2_list[i]; i++)  {    if (!ascii_strcasecmp (s, type2_list[i]->shortname))    {      chain->ch[chain->cl++] = i;      return 0;    }  }    /* replace unknown remailers by <random> */    if (!type2_list[i])    chain->ch[chain->cl++] = 0;  return 0;}static struct mapping_t RemailerHelp[] = {  { N_("Append"), OP_MIX_APPEND },  { N_("Insert"), OP_MIX_INSERT },  { N_("Delete"), OP_MIX_DELETE },  { N_("Abort"),  OP_EXIT       },  { N_("OK"),     OP_MIX_USE    },  { NULL }};  void mix_make_chain (LIST **chainp, int *redraw){  LIST *p;  MIXCHAIN *chain;  int c_cur = 0, c_old = 0;  int m_len;  short c_redraw = 1;    REMAILER **type2_list = NULL;  size_t ttll = 0;    struct coord *coords = NULL;    MUTTMENU *menu;  char helpstr[SHORT_STRING];  short loop = 1;  int op;    int i, j;  char *t;  if (!(type2_list = mix_type2_list (&ttll)))  {    mutt_error _("Can't get mixmaster's type2.list!");    return;  }  *redraw = REDRAW_FULL;    chain = safe_calloc (sizeof (MIXCHAIN), 1);  for (p = *chainp; p; p = p->next)    mix_chain_add (chain, (char *) p->data, type2_list);  mutt_free_list (chainp);    /* safety check */  for (i = 0; i < chain->cl; i++)  {    if (chain->ch[i] >= ttll)      chain->ch[i] = 0;  }    mix_screen_coordinates (type2_list, &coords, chain, 0);    menu = mutt_new_menu ();  menu->menu = MENU_MIX;  menu->max = ttll;  menu->make_entry = mix_entry;  menu->tag = NULL;  menu->title = _("Select a remailer chain.");  menu->data = type2_list;  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MIX, RemailerHelp);  m_len = menu->pagelen = MIX_VOFFSET - menu->offset - 1;    while (loop)   {    if (menu->pagelen != m_len)    {      menu->pagelen = m_len;      menu->redraw = REDRAW_FULL;    }        if (c_redraw)    {      mix_redraw_head (chain);      mix_redraw_chain (type2_list, coords, chain, c_cur);      c_redraw = 0;    }    else if (c_cur != c_old)    {      mix_redraw_ce (type2_list, coords, chain, c_old, 0);      mix_redraw_ce (type2_list, coords, chain, c_cur, 1);    }        c_old = c_cur;        switch ((op = mutt_menuLoop (menu)))    {      case OP_REDRAW:      {	menu_redraw_status (menu);	mix_redraw_head (chain);	mix_screen_coordinates (type2_list, &coords, chain, 0);	mix_redraw_chain (type2_list, coords, chain, c_cur);	menu->pagelen = m_len = MIX_VOFFSET - menu->offset - 1;	break;      }            case OP_EXIT:      {	chain->cl = 0;	loop = 0;	break;      }      case OP_MIX_USE:      {	if (!chain->cl)	{	  chain->cl++;	  chain->ch[0] = menu->current;	  mix_screen_coordinates (type2_list, &coords, chain, c_cur);	  c_redraw = 1;	}		if (chain->cl && chain->ch[chain->cl - 1] && 	    (type2_list[chain->ch[chain->cl-1]]->caps & MIX_CAP_MIDDLEMAN))	{	  mutt_error ( _("Error: %s can't be used as the final remailer of a chain."),		    type2_list[chain->ch[chain->cl - 1]]->shortname);	}	else	{	  loop = 0;	}	break;      }      case OP_GENERIC_SELECT_ENTRY:      case OP_MIX_APPEND:      {	if (chain->cl < MAXMIXES && c_cur < chain->cl)	  c_cur++;      }      /* fallthrough */      case OP_MIX_INSERT:      {	if (chain->cl < MAXMIXES)	{	  chain->cl++;	  for (i = chain->cl - 1; i > c_cur; i--)	    chain->ch[i] = chain->ch[i-1];	  	  chain->ch[c_cur] = menu->current;	  mix_screen_coordinates (type2_list, &coords, chain, c_cur);	  c_redraw = 1;	}	else	  mutt_error ( _("Mixmaster chains are limited to %d elements."),		    MAXMIXES);		break;      }            case OP_MIX_DELETE:      {	if (chain->cl)	{	  chain->cl--;	  	  for (i = c_cur; i < chain->cl; i++)	    chain->ch[i] = chain->ch[i+1];	  if (c_cur == chain->cl && c_cur)	    c_cur--;	  	  mix_screen_coordinates (type2_list, &coords, chain, c_cur);	  c_redraw = 1;	}	else	{	  mutt_error _("The remailer chain is already empty.");	}	break;      }            case OP_MIX_CHAIN_PREV:      {	if (c_cur) 	  c_cur--;	else	  mutt_error _("You already have the first chain element selected.");		break;      }            case OP_MIX_CHAIN_NEXT:      {	if (chain->cl && c_cur < chain->cl - 1)	  c_cur++;	else	  mutt_error _("You already have the last chain element selected.");		break;      }    }  }    mutt_menuDestroy (&menu);  /* construct the remailer list */    if (chain->cl)  {    for (i = 0; i < chain->cl; i++)    {      if ((j = chain->ch[i]))	t = type2_list[j]->shortname;      else	t = "*";            *chainp = mutt_add_list (*chainp, t);    }  }    mix_free_type2_list (&type2_list);  FREE (&coords);  FREE (&chain);}/* some safety checks before piping the message to mixmaster */int mix_check_message (HEADER *msg){  const char *fqdn;  short need_hostname = 0;  ADDRESS *p;    if (msg->env->cc || msg->env->bcc)  {    mutt_error _("Mixmaster doesn't accept Cc or Bcc headers.");    return -1;  }  /* When using mixmaster, we MUST qualify any addresses since   * the message will be delivered through remote systems.   *    * use_domain won't be respected at this point, hidden_host will.   */  for (p = msg->env->to; p; p = p->next)  {    if (!p->group && strchr (p->mailbox, '@') == NULL)    {      need_hostname = 1;      break;    }  }      if (need_hostname)  {        if (!(fqdn = mutt_fqdn (1)))    {      mutt_error _("Please set the hostname variable to a proper value when using mixmaster!");      return (-1);    }      /* Cc and Bcc are empty at this point. */    rfc822_qualify (msg->env->to, fqdn);    rfc822_qualify (msg->env->reply_to, fqdn);    rfc822_qualify (msg->env->mail_followup_to, fqdn);  }  return 0;}int mix_send_message (LIST *chain, const char *tempfile){  char cmd[HUGE_STRING];  char tmp[HUGE_STRING];  char cd_quoted[STRING];  int i;  snprintf (cmd, sizeof (cmd), "cat %s | %s -m ", tempfile, Mixmaster);    for (i = 0; chain; chain = chain->next, i = 1)  {    strfcpy (tmp, cmd, sizeof (tmp));    mutt_quote_filename (cd_quoted, sizeof (cd_quoted), (char *) chain->data);    snprintf (cmd, sizeof (cmd), "%s%s%s", tmp, i ? "," : " -l ", cd_quoted);  }  if (!option (OPTNOCURSES))    mutt_endwin (NULL);    if ((i = mutt_system (cmd)))  {    fprintf (stderr, _("Error sending message, child exited %d.\n"), i);    if (!option (OPTNOCURSES))    {      mutt_any_key_to_continue (NULL);      mutt_error _("Error sending message.");    }  }  unlink (tempfile);  return i;}  #endif

⌨️ 快捷键说明

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