📄 chretrieve.c
字号:
#include <stdio.h>/* contains: * CH_RetrieveItem */#include <sys/types.h>#include <netns/ns.h>#include "Clearinghouse2_defs.h"#include <xnscourier/CHEntries.h>#include <xnscourier/except.h>/* * This module contains the routine: * CH_RetrieveItem(pattern,property,result) * ObjectNamePattern pattern; * Property property; * RetrieveItemResults *result; */static Cardinal nullhash = 0;static Authenticator nullagent = {{0,{0,(Unspecified*) 0}}, {1,&nullhash}};static ObjectName currentname;extern struct ns_addr *LookupCHAddr();CH_RetrieveItem(pattern,property,result) ObjectNamePattern pattern; Property property; RetrieveItemResults *result;{ CourierConnection *conn, *ch2conn; extern CourierConnection *CH_GetFirstCH(), *CH_GetOtherCH(); RetrieveItemResults riresult; ObjectName hint; /* from WrongServer errors */ if (pattern.object == NULL || pattern.domain == NULL || pattern.organization == NULL) { return(1); } if ((conn = CH_GetFirstCH()) == NULL) { fprintf(stderr,"Can't open connection to local Clearinghouse\n"); return(1); } DURING { riresult= RetrieveItem(conn, NULL, pattern,property,nullagent); } HANDLER { if (Exception.Code == REJECT_ERROR) { CourierClose(conn); fprintf(stderr,"Problem with clearinghouse.addresses. Local CH rejected request\n"); return(1); } if (Exception.Code != WrongServer) { CourierClose(conn); return(1); /* some random error */ } hint = CourierErrArgs(WrongServerArgs,hint); ch2conn = CH_GetOtherCH(conn,hint); CourierClose(conn); if (ch2conn == NULL) return(1); conn = ch2conn; /* probe the second clearinghouse */ DURING riresult = RetrieveItem(conn,NULL, pattern, property, nullagent); HANDLER { /* should be smarter is WrongServer here */ CourierClose(conn); return(1); } END_HANDLER; /* we got it */ } END_HANDLER; CourierClose(conn); bcopy(&riresult, result, sizeof(Clearinghouse2_RetrieveItemResults)); return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -