00001 /* 00002 * Copyright (C) 2006 SRI International 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation; either 00007 * version 2.1 of the License, or (at your option) any later version. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Lesser General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Lesser General Public 00015 * License along with this library; if not, write to the Free Software 00016 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00017 * 00018 * SRI International: 333 Ravenswood Ave, Menlo Park, CA 94025 00019 */ 00020 00021 #include "termsender.h" 00022 #include <stdlib.h> 00023 00024 struct TermSenderStruct 00025 { 00026 TermSenderSendTerm sendTerm; 00027 TermSenderCleanup cleanup; 00028 TermSenderType type; 00029 gint sendSocket; 00030 gint error; 00031 gpointer senderSpecificData; 00032 } 00033 ; 00034 00035 TermSender* termSender_create() 00036 { 00037 TermSender* t = (TermSender*)malloc(sizeof(TermSender)); 00038 t->sendTerm = NULL; 00039 t->cleanup = NULL; 00040 t->type = UNKNOWNTERMSENDERTYPE; 00041 t->sendSocket = -1; 00042 t->error = TERMSENDER_OKAY; 00043 t->senderSpecificData = NULL; 00044 return t; 00045 } 00046 00047 void termSender_free(TermSender* t) 00048 { 00049 if(t->cleanup != NULL) { 00050 t->cleanup(t); 00051 } 00052 free(t); 00053 } 00054 00055 int termSender_sendTerm(TermSender* sender, ICLTerm* term) 00056 { 00057 if(sender->sendTerm != NULL) { 00058 sender->sendTerm(sender, term); 00059 if(sender->error != TERMSENDER_OKAY) { 00060 return -1; 00061 } 00062 } 00063 else { 00064 sender->error = TERMSENDER_NOTINITIALIZED; 00065 return -1; 00066 } 00067 return 0; 00068 } 00069 00070 void termSender_setError(TermSender* t, gint errnum) 00071 { 00072 t->error = errnum; 00073 } 00074 00075 gint termSender_getError(TermSender* t) 00076 { 00077 return t->error; 00078 } 00079 00080 void termSender_setSocket(TermSender* t, gint newsocket) 00081 { 00082 t->sendSocket = newsocket; 00083 } 00084 00085 gint termSender_getSocket(TermSender* t) 00086 { 00087 return t->sendSocket; 00088 } 00089 00090 void termSender_setType(TermSender* t, TermSenderType type) 00091 { 00092 t->type = type; 00093 } 00094 00095 TermSenderType termSender_getType(TermSender* t) 00096 { 00097 return t->type; 00098 } 00099 00100 void termSender_setSenderSpecificData(TermSender* t, gpointer g) 00101 { 00102 t->senderSpecificData = g; 00103 } 00104 00105 gpointer termSender_getSenderSpecificData(TermSender* t) 00106 { 00107 return t->senderSpecificData; 00108 } 00109 00110 void termSender_setSendTermCallback(TermSender* t, TermSenderSendTerm s) 00111 { 00112 t->sendTerm = s; 00113 } 00114 00115 void termSender_setCleanupCallback(TermSender* t, TermSenderCleanup c) 00116 { 00117 t->cleanup = c; 00118 }