1: /* 2: ** proxy.c This file implements the proxy() call. 3: ** 4: ** This program is in the public domain and may be used freely by anyone 5: ** who wants to. 6: ** 7: ** Last update: 12 Dec 1992 8: ** 9: ** Please send bug fixes/bug reports to: Peter Eriksson <pen@lysator.liu.se> 10: */ 11: 12: #include <stdio.h> 13: #include <errno.h> 14: 15: #include "identd.h" 16: 17: 18: #ifdef INCLUDE_PROXY 19: #include <sys/types.h> 20: #include <sys/time.h> 21: #include <netinet/in.h> 22: 23: #include <ident.h> 24: #endif 25: 26: #ifndef __STDC__ 27: #define void int 28: #endif 29: 30: /* 31: ** This function should establish a connection to a remote IDENT 32: ** server and query it for the information associated with the 33: ** specified connection and the return that to the caller. 34: ** 35: ** Should there be three different timeouts (Connection Establishment, 36: ** Query Transmit and Query Receive)? 37: */ 38: int proxy(laddr, faddr, lport, fport, timeout) 39: #ifdef INCLUDE_PROXY 40: struct in_addr *laddr; 41: struct in_addr *faddr; 42: #else 43: void *laddr, *faddr; 44: #endif 45: int lport; 46: int fport; 47: #ifdef INCLUDE_PROXY 48: struct timeval *timeout; 49: #else 50: void *timeout; 51: #endif 52: { 53: #ifndef INCLUDE_PROXY 54: /* Just here to make the compiler shut up! */ 55: laddr = faddr = NULL; 56: timeout = NULL; 57: 58: printf("%d , %d : ERROR : %s\r\n", 59: lport, fport, 60: unknown_flag ? "UNKNOWN-ERROR" : "X-NOT-YET-IMPLEMENTED"); 61: 62: return -1; 63: #else 64: id_t *idp; 65: char *answer; 66: char *opsys; 67: char *charset; 68: 69: idp = id_open(laddr, faddr, timeout); 70: if (!idp) 71: { 72: printf("%d , %d : ERROR : %s\r\n", 73: lport, fport, 74: unknown_flag ? "UNKNOWN-ERROR" : "X-CONNECTION-REFUSED"); 75: return -1; 76: } 77: 78: if (id_query(idp, lport, fport, timeout) < 0) 79: { 80: printf("%d , %d : ERROR : %s\r\n", 81: lport, fport, 82: unknown_flag ? "UNKNOWN-ERROR" : "X-TRANSMIT-QUERY-ERROR"); 83: id_close(idp); 84: return -1; 85: } 86: 87: switch (id_parse(idp, timeout, &lport, &fport, &answer, &opsys, &charset)) 88: { 89: case 1: 90: printf("%d , %d : USERID : %s %s%s : %s\r\n", 91: lport, fport, 92: opsys, 93: charset ? "," : "", 94: charset ? charset : "", 95: answer); 96: break; 97: 98: case 2: 99: printf("%d , %d : ERROR : %s\r\n", 100: lport, fport, answer); 101: break; 102: 103: case 0: /* More to parse - fix this later! */ 104: case -1: /* Internal error */ 105: default: 106: printf("%d , %d : ERROR : %s\r\n", 107: lport, fport, 108: unknown_flag ? "UNKNOWN-ERROR" : "X-PARSE-REPLY-ERROR"); 109: } 110: 111: id_close(idp); 112: #endif 113: }