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

📄 calls.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
  }  read_arg.rda_common.ca_servicecontrol.svc_options = SVC_OPT_PREFERCHAIN;  read_arg.rda_eis.eis_allattributes = FALSE;  read_arg.rda_eis.eis_infotypes = EIS_ATTRIBUTESANDVALUES;  read_arg.rda_eis.eis_select = read_types;  read_arg.rda_object = (*friendly_base_path != 'T'? 			 str2dn(base_path): 			 NULLDN);  if ((read_entry = local_find_entry(read_arg.rda_object, FALSE))       != NULLENTRY &&      read_entry->e_data != E_TYPE_CONSTRUCTOR) {    read_entry->e_attributes = sort_attrs(read_entry->e_attributes);    read_print (as_print, (caddr_t) read_entry->e_attributes);    return;  }#ifndef NO_STATS  LLOG (log_stat,LLOG_NOTICE,("read +%s",base_path));#endif  if (ds_read (&read_arg,&error,&result) != DS_OK) {    /* deal with error */    cleartext();    quipu_error(&error);  } else {    /* use data */    if (result.rdr_entry.ent_attr == NULLATTR) {      free_seq(textseq);      if (text_state == DN_LIST) free_seq(curr_dnseq);      curr_dnseq = textseq = NULLDS;      entry_number = 0;      text_state = TEXT;      xprint("No attributes");      return;    }    xprint("Result of look up ...\n");    if (result.rdr_common.cr_aliasdereferenced)      xprint("Alias dereferenced)\n");        result.rdr_entry.ent_attr = sort_attrs(result.rdr_entry.ent_attr);    cache_entry(&(result.rdr_entry), FALSE, TRUE);    read_print(as_print, (caddr_t) result.rdr_entry.ent_attr);  }}void back_start(){  if (!back_buf_num) {    cleartext();    tprint("History Buffer Empty!\n");    sleep(3);    scrollbar('\0');    return;  }  if (text_state == DN_LIST) free_seq(curr_dnseq);  free_seq(textseq);  textseq = NULLDS;  curr_dnseq = back_seq;  text_state = BACK_LIST;  entry_number = back_buf_num;  current_entry = display_entry = 1;  scrollbar('\0');}void widen(){  register char *str, *sptr;  int count = 0;  str_seq first;  str = get_from_seq(count+1, back_seq);  while (count < back_buf_num && strcmp(str, base_path)){    count++;    str = get_from_seq(count+1, back_seq);  }	  if (count == back_buf_num) {    add_seq(&back_seq, base_path);    if (++back_buf_num > histlimit) {      first = back_seq;      back_seq = back_seq->next;      first->next = 0;      free_seq(first);    }  }  str = base_path;  if (*str != 'T') {    for (sptr = str; *sptr != '\0'; sptr++)      if (*sptr == '@')	str = sptr;    sptr = str;    typetoggled = 0;    if (str != base_path) {      if (*--sptr == ' ')	str = sptr;      *str = '\0';    } else      (void) strcpy(base_path, "The World");    make_friendly(friendly_base_path, base_path);    set_default_type();    printdialog(getwidget(mainwdgts, '\0'));    rd_start();  }}void set_default_type(){  int count, lastindx;  WIDGET *wdgt, *vwdgt;  DN base_name;  wdgt = getwidget(mainwdgts,'t');  vwdgt = getwidget(mainwdgts, 's');  if (av_typeindx)    lastindx = wdgt->tindx;  else    lastindx = 0;  if (*base_path != 'T') {    if (!typetoggled) {      base_name = str2dn(base_path);      while (base_name->dn_parent) base_name = base_name->dn_parent;      for (count = 0; count < default_num &&	   strcmp(levels[count] ,base_name->dn_rdn->rdn_at->		  oa_ot.ot_stroid);	   count++);            if (count < default_num) {	av_typeindx = available_types[count];	typeindx = defaults[count];      } else {	av_typeindx = available_types[0];	typeindx = defaults[0];      }      count = typeindx;      if (count < filt_num) {	if (lastindx)	  (void) strcpy(filtvalue[lastindx], vwdgt->dstr);	wdgt->tindx = count;	(void) strcpy(vwdgt->dstr, filtvalue[wdgt->tindx]);      }    }   } else {    for(count = 0; count < default_num && strcmp(levels[count], "@"); count++);    if (count < default_num) {      av_typeindx = available_types[count];      typeindx = defaults[count];    } else {      av_typeindx = available_types[0];      typeindx = defaults[0];    }    count = typeindx;    if (count < filt_num) {      if (lastindx)	(void) strcpy(filtvalue[lastindx], vwdgt->dstr);      wdgt->tindx = count;      (void) strcpy(vwdgt->dstr, filtvalue[wdgt->tindx]);    }  }  make_friendly(friendly_base_path, base_path);  typetoggled = 0;  printtoggle(wdgt);  printdialog(vwdgt);}/* These are the functions called by the list level widgets */void list_start(){  struct ds_search_arg search_arg;  struct ds_search_result result;  struct DSError          error;  cleartext();  xprint("OK, listing.\n");  tprint("Working. Please wait.....");  if (get_default_service (&search_arg.sra_common) != 0) {    xprint ("Default service error -> check your .quipurc\n");    return ;  }    search_arg.sra_common.ca_servicecontrol.svc_options = SVC_OPT_PREFERCHAIN;  search_arg.sra_baseobject = (*base_path != 'T'?			       str2dn (base_path):			       NULLDN);  search_arg.sra_eis.eis_allattributes = FALSE;  search_arg.sra_eis.eis_infotypes = EIS_ATTRIBUTETYPESONLY;  search_arg.sra_eis.eis_select = 0;  search_arg.sra_subset = SRA_ONELEVEL;  search_arg.sra_filter = filter_alloc();  search_arg.sra_filter->flt_type = FILTER_NOT;  search_arg.sra_filter->flt_next = NULLFILTER;  search_arg.sra_filter->flt_un.flt_un_filter = filter_alloc();  search_arg.sra_filter->flt_un.flt_un_filter->flt_type = FILTER_ITEM;  search_arg.sra_filter->flt_un.flt_un_filter->flt_next = NULLFILTER;  search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.fi_type    = FILTERITEM_EQUALITY;  search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.fi_un.    fi_un_ava.ava_type = AttrT_new("2.5.4.0");  search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.fi_un.    fi_un_ava.ava_value =       str2AttrV("dsa", search_arg.sra_filter->flt_un.flt_un_filter->		flt_un.flt_un_item.fi_un.fi_un_ava.ava_type->		oa_syntax);  if (search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.      fi_un.fi_un_ava.ava_value == NULLAttrV) {    cleartext();    xprint("Internal Error! Sorry.");  } else if (ds_search (&search_arg,&error,&result) != DS_OK) {    /* deal with error */    free_seq(textseq);    if (text_state == DN_LIST) free_seq(curr_dnseq);    curr_dnseq = textseq = NULLDS;    text_state = TEXT;    entry_number = 0;    cleartext();    xprint("Search error!\n");    quipu_error(&error);  } else {    cleartext();    correlate_search_results (&result);    if (result.CSR_entries != NULLENTRYINFO) {      register EntryInfo *ptr;            xprint ("Result of search ...\n");      if (result.CSR_common.cr_aliasdereferenced) {	xprint ("(Alias dereferenced -  object is ");	quipu_print ((IFP)dn_print, (caddr_t) result.CSR_object);	dn_free (result.CSR_object);	xprint (")\n");      }      if (text_state == DN_LIST) free_seq(curr_dnseq);      free_seq(textseq);      curr_dnseq = textseq = NULLDS;      display_entry = current_entry = 1;      entry_number = 0;      text_state = DN_LIST;      for (ptr = result.CSR_entries; ptr != NULLENTRYINFO;	   ptr = ptr->ent_next) {	entry_number++;	dn2buf ((caddr_t)ptr->ent_dn, goto_path);	add_seq (&curr_dnseq, goto_path);      }      if (entry_number) curr_dnseq = SortList(curr_dnseq);      scrollbar('\0');    } else if (result.CSR_limitproblem != LSR_TIMELIMITEXCEEDED) {      free_seq(textseq);      if (text_state == DN_LIST) free_seq(curr_dnseq);      curr_dnseq = textseq = NULLDS;      entry_number  = 0;      text_state = TEXT;      xprint("Nothing found<");    }    if(result.CSR_limitproblem != LSR_NOLIMITPROBLEM) {      switch (result.CSR_limitproblem) {      case LSR_TIMELIMITEXCEEDED:        if (entry_number > 0) 	  xprint("(Time limit exceeded. Partial results only.)");        else {          free_seq(curr_dnseq);          curr_dnseq = NULLDS;	  xprint("(Time limit exceeded.)");        }        break;      case LSR_SIZELIMITEXCEEDED:	xprint("(Size limit exceeded)");        break;      case LSR_ADMINSIZEEXCEEDED:        if (entry_number > 0) 	  xprint("(Administrative limit reached. Partial results only.)");        else {          free_seq(curr_dnseq);          curr_dnseq = NULLDS;	  xprint("(Administrative limit reached.)");        }        break;      }    }    entryinfo_free(result.CSR_entries, 0);  }  filter_free(search_arg.sra_filter);}void rdn2str(ptr,cptr)     caddr_t ptr;     char * cptr;{  PS ps;  char buffer [RESBUF];    if ((ps = ps_alloc(str_open)) == NULLPS) {    return ;  }  if (str_setup(ps, buffer, RESBUF, 1) == NOTOK) {    return ;  }  rdn_print(ps, (RDN) ptr, READOUT);    ps_free(ps);  *ps->ps_ptr = 0;    (void) strcpy(cptr, buffer);}void srch_start(){  struct ds_search_arg search_arg;  struct ds_search_result result;  struct DSError          error;  WIDGET *wdgt;  DN curr_rdn;  if (*mvalue == '\0') {    list_start();    return;  }    cleartext();  xprint("OK. Starting search.\n");  tprint("Working. Please wait.....");  wdgt = getwidget(mainwdgts,'t');    if (get_default_service (&search_arg.sra_common) != 0) {    xprint ("Default service error -> check your .quipurc\n");    return ;  }    search_arg.sra_common.ca_servicecontrol.svc_options = SVC_OPT_PREFERCHAIN;  curr_rdn = search_arg.sra_baseobject = (*base_path != 'T'? 					  str2dn (base_path):					  NULLDN);  search_arg.sra_eis.eis_allattributes = FALSE;  search_arg.sra_eis.eis_infotypes = EIS_ATTRIBUTETYPESONLY;  search_arg.sra_eis.eis_select = 0;    search_arg.sra_subset = SRA_ONELEVEL;  while (curr_rdn != NULLDN) {    if (!strcmp(curr_rdn->dn_rdn->rdn_at->oa_ot.ot_stroid,		"2.5.4.10")) {      search_arg.sra_subset = SRA_WHOLESUBTREE;      break;    }    curr_rdn = curr_rdn->dn_parent;  }  if ((search_arg.sra_filter = make_filter(filt_arr[gettogglindx(wdgt)]))       == NULLFILTER) {    (void) xprint("Invalid search filter!");    return;  }#ifndef NO_STATS  LLOG (log_stat,LLOG_NOTICE,("search +%s, extent %d, val %s", 			      base_path, search_arg.sra_subset, mvalue));#endif  if(ds_search (&search_arg,&error,&result) != DS_OK) {    /* deal with error */    free_seq(textseq);    if (text_state == DN_LIST) free_seq(curr_dnseq);    curr_dnseq = textseq = NULLDS;    entry_number = 0;    text_state = TEXT;    cleartext();    xprint(" Search error!\n ");    quipu_error(&error);  } else {    cleartext();    correlate_search_results (&result);    if (result.CSR_entries != NULLENTRYINFO) {      register EntryInfo *ptr;      if (result.CSR_common.cr_aliasdereferenced) {	xprint (" (Alias dereferenced - object is ");	quipu_print ((IFP)dn_print, (caddr_t) result.CSR_object);	dn_free (result.CSR_object);	xprint (")\n");      }      if (text_state == DN_LIST) free_seq(curr_dnseq);      free_seq(textseq);      curr_dnseq = textseq = NULLDS;      display_entry = current_entry = 1;      entry_number = 0;      text_state = DN_LIST;      for (ptr = result.CSR_entries; 	   ptr != NULLENTRYINFO; ptr = ptr->ent_next){	entry_number++;	dn2buf ((caddr_t) ptr->ent_dn, goto_path);	add_seq (&curr_dnseq, goto_path);      }      if (entry_number > 1) curr_dnseq = SortList(curr_dnseq);      if (entry_number != 1)	scrollbar('\0');      else {	if  (!isleafnode(goto_path)) {	  get_listed_object('1', (WIDGET *) 0);	} else {	  char temp[1024];	  (void) strcpy(temp, base_path);	  (void) strcpy(base_path, goto_path);	  rd_start();	  (void) strcpy(base_path, temp);	}      }    } else if(result.CSR_limitproblem != LSR_TIMELIMITEXCEEDED) {      free_seq(textseq);      if (text_state == DN_LIST) free_seq(curr_dnseq);      curr_dnseq = textseq = NULLDS;      entry_number = 0;      text_state = TEXT;      xprint("Nothing found using current search parameters.\n");    }        if(result.CSR_limitproblem != LSR_NOLIMITPROBLEM)      switch (result.CSR_limitproblem) {      case LSR_TIMELIMITEXCEEDED:        if (entry_number > 0) 	  xprint("(Time limit exceeded. Partial results only.)");        else {          free_seq(curr_dnseq);          curr_dnseq = NULLDS;	  xprint("(Time limit exceeded.)");        }        break;      case LSR_SIZELIMITEXCEEDED:	xprint("(Size limit exceeded)");        break;      case LSR_ADMINSIZEEXCEEDED:        if (entry_number > 0) 	  xprint("(Administrative limit reached. Partial results only.)");        else {          free_seq(curr_dnseq);          curr_dnseq = NULLDS;	  xprint("(Administrative limit reached.)");        }        break;      }        entryinfo_free(result.CSR_entries, 0);  }  filter_free(search_arg.sra_filter);}void dn2buf (ptr,cptr)     caddr_t ptr;     char * cptr;{  PS ps;  char buffer [RESBUF];    if((ps = ps_alloc(str_open)) == NULLPS) return ;  if(str_setup(ps, buffer, RESBUF, 1) == NOTOK) return ;    dn_print(ps, (DN) ptr, EDBOUT);  *ps->ps_ptr = 0;    ps_free (ps);  (void) strcpy(cptr, buffer);}void read_print(func,ptr)     int (*func) ();     caddr_t ptr;{  PS ps;  char buffer [RESBUF];  char save;  int i, size;  register char *str, *sptr;    if ((ps = ps_alloc (str_open)) == NULLPS) return ;    if (str_setup (ps,buffer,RESBUF,1) == NOTOK) return ;    (*func) (ps, ptr, READOUT);  *ps->ps_ptr = 0;    ps_free(ps);  str = buffer ;  sptr = str;  size = strlen(buffer);    if (text_state == DN_LIST) free_seq(curr_dnseq);  curr_dnseq = NULLDS;  free_seq(textseq);  textseq = NULLDS;  display_entry = current_entry = 1;  entry_number = 0;  text_state = TEXT;    for (i = 0; i <= size; i++, sptr++)    if (*sptr == '\n' || *sptr == '\0') {      entry_number++;      save = *sptr ;      *sptr = '\0';            if (mailformat == greybook && indexstring(str, "rfc822") >= 0)        (void) rfc2jnt(str);      add_seq(&textseq, str);            str = sptr+1;      *sptr = save;    }    scrollbar('\0');}void quipu_print(func,ptr)     int (*func)();         /* assumes func (PS ,dataptr,(int) format); */     caddr_t ptr;{  PS ps;  char buffer [RESBUF];  int count;  register char *str, *sptr;  char save;  

⌨️ 快捷键说明

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