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

📄 smanager.c

📁 SIP(Session Initiation Protocol)是由IETF定义
💻 C
字号:
/* * Program:	Subscription Manager * * Author:	Mark Crispin *		Networks and Distributed Computing *		Computing & Communications *		University of Washington *		Administration Building, AG-44 *		Seattle, WA  98195 *		Internet: MRC@CAC.Washington.EDU * * Date:	3 December 1992 * Last Edited:	14 April 1997 * * Copyright 1997 by the University of Washington * *  Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appears in all copies and that both the * above copyright notice and this permission notice appear in supporting * documentation, and that the name of the University of Washington not be * used in advertising or publicity pertaining to distribution of the software * without specific, written prior permission.  This software is made * available "as is", and * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */#include <stdio.h>#include <ctype.h>#include "mail.h"#include "osdep.h"#include "misc.h"/* Subscribe to mailbox * Accepts: mailbox name * Returns: T on success, NIL on failure */long sm_subscribe (char *mailbox){  FILE *f;  char *s,db[MAILTMPLEN],tmp[MAILTMPLEN];  SUBSCRIPTIONFILE (db);	/* open subscription database */  if (f = fopen (db,"r")) {	/* make sure not already there */    while (fgets (tmp,MAILTMPLEN,f)) {      if (s = strchr (tmp,'\n')) *s = '\0';      if (!strcmp (tmp,mailbox)) {/* already subscribed? */	sprintf (tmp,"Already subscribed to mailbox %s",mailbox);	mm_log (tmp,ERROR);	fclose (f);	return NIL;      }    }    fclose (f);  }  if (!(f = fopen (db,"a"))) {	/* append new entry */    mm_log ("Can't create subscription database",ERROR);    return NIL;  }  fprintf (f,"%s\n",mailbox);  return (fclose (f) == EOF) ? NIL : T;}/* Unsubscribe from mailbox * Accepts: mailbox name * Returns: T on success, NIL on failure */long sm_unsubscribe (char *mailbox){  FILE *f,*tf;  char *s,tmp[MAILTMPLEN],old[MAILTMPLEN],newname[MAILTMPLEN];  long ret = NIL;  SUBSCRIPTIONFILE (old);	/* open subscription database */  if (!(f = fopen (old,"r"))) {	/* can we? */    mm_log ("No subscriptions",ERROR);    return NIL;  }  SUBSCRIPTIONTEMP (newname);	/* make tmp file name */  if (!(tf = fopen (newname,"w"))) {    mm_log ("Can't create subscription temporary file",ERROR);    fclose (f);    return NIL;  }  while (fgets (tmp,MAILTMPLEN,f)) {    if (s = strchr (tmp,'\n')) *s = '\0';    if (strcmp (tmp,mailbox)) fprintf (tf,"%s\n",tmp);    else ret = T;		/* found the name */  }  fclose (f);  if (fclose (tf) == EOF) {    mm_log ("Can't write subscription temporary file",ERROR);    return NIL;  }  if (!ret) {    sprintf (tmp,"Not subscribed to mailbox %s",mailbox);    mm_log (tmp,ERROR);		/* error if at end */  }  else rename (newname,old);  return ret;}/* Read subscription database * Accepts: pointer to subscription database handle (handle NIL if first time) * Returns: character string for subscription database or NIL if done */static char sbname[MAILTMPLEN];char *sm_read (void **sdb){  FILE *f = (FILE *) *sdb;  char *s;  if (!f) {			/* first time through? */    SUBSCRIPTIONFILE (sbname);	/* open subscription database */				/* make sure not already there */    if (f = fopen (sbname,"r")) *sdb = (void *) f;    else return NIL;  }  if (fgets (sbname,MAILTMPLEN,f)) {    if (s = strchr (sbname,'\n')) *s = '\0';    return sbname;  }  fclose (f);			/* all done */  *sdb = NIL;			/* zap sdb */  return NIL;}

⌨️ 快捷键说明

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