Mercurial > hg > audiodb
comparison soap.cpp @ 307:d1b8b2dec37e
Added reporters radius search via Web Services. The ordering for radius search is degenerate if usingQueryPoint, because the query point can only be counted once. This behaviour is changed by specifying -n 1 to emulate the trackAveragingReporter ordering behaviour
author | mas01mc |
---|---|
date | Wed, 06 Aug 2008 21:23:14 +0000 |
parents | 2cc06e5b05a5 |
children | 896679d8cc39 |
comparison
equal
deleted
inserted
replaced
306:921ba500a024 | 307:d1b8b2dec37e |
---|---|
26 soap_destroy(&soap); | 26 soap_destroy(&soap); |
27 soap_end(&soap); | 27 soap_end(&soap); |
28 soap_done(&soap); | 28 soap_done(&soap); |
29 } | 29 } |
30 | 30 |
31 void audioDB::ws_query(const char*dbName, const char *trackKey, const char* hostport){ | 31 void audioDB::ws_query(const char*dbName, const char *featureFileName, const char* hostport){ |
32 struct soap soap; | 32 struct soap soap; |
33 adb__queryResponse adbQueryResponse; | 33 adb__queryResponse adbQueryResponse; |
34 | 34 |
35 soap_init(&soap); | 35 soap_init(&soap); |
36 if(soap_call_adb__query(&soap,hostport,NULL, | 36 if(soap_call_adb__query(&soap,hostport,NULL, |
37 (char*)dbName,(char*)trackKey,(char*)trackFileName,(char*)timesFileName, | 37 (char*)dbName,(char*)featureFileName,(char*)trackFileName,(char*)timesFileName, |
38 queryType, queryPoint, pointNN, trackNN, sequenceLength, adbQueryResponse)==SOAP_OK){ | 38 queryType, queryPoint, pointNN, trackNN, sequenceLength, adbQueryResponse)==SOAP_OK){ |
39 //std::std::cerr << "result list length:" << adbQueryResponse.result.__sizeRlist << std::std::endl; | 39 //std::std::cerr << "result list length:" << adbQueryResponse.result.__sizeRlist << std::std::endl; |
40 for(int i=0; i<adbQueryResponse.result.__sizeRlist; i++) | 40 for(int i=0; i<adbQueryResponse.result.__sizeRlist; i++) |
41 std::cout << adbQueryResponse.result.Rlist[i] << " " << adbQueryResponse.result.Dist[i] | 41 std::cout << adbQueryResponse.result.Rlist[i] << " " << adbQueryResponse.result.Dist[i] |
42 << " " << adbQueryResponse.result.Qpos[i] << " " << adbQueryResponse.result.Spos[i] << std::endl; | 42 << " " << adbQueryResponse.result.Qpos[i] << " " << adbQueryResponse.result.Spos[i] << std::endl; |
46 | 46 |
47 soap_destroy(&soap); | 47 soap_destroy(&soap); |
48 soap_end(&soap); | 48 soap_end(&soap); |
49 soap_done(&soap); | 49 soap_done(&soap); |
50 } | 50 } |
51 | |
52 void audioDB::ws_query_by_key(const char*dbName, const char *trackKey, const char* hostport){ | |
53 struct soap soap; | |
54 adb__queryResponse adbQueryResponse; | |
55 adb__sequenceQueryParms asqp; | |
56 | |
57 asqp.keyList = (char*)trackFileName; | |
58 asqp.timesFileName = (char*)timesFileName; | |
59 asqp.queryPoint = queryPoint; | |
60 asqp.pointNN = pointNN; | |
61 asqp.trackNN = trackNN; | |
62 asqp.sequenceLength = sequenceLength; | |
63 asqp.radius = radius; | |
64 asqp.relative_threshold = relative_threshold; | |
65 asqp.absolute_threshold = absolute_threshold; | |
66 | |
67 soap_init(&soap); | |
68 if(queryType==O2_SEQUENCE_QUERY || queryType==O2_N_SEQUENCE_QUERY){ | |
69 if(soap_call_adb__sequenceQuery_by_key(&soap,hostport,NULL,(char*)dbName,(char*)trackKey,queryType,&asqp,adbQueryResponse)==SOAP_OK){ | |
70 //std::std::cerr << "result list length:" << adbQueryResponse.result.__sizeRlist << std::std::endl; | |
71 for(int i=0; i<adbQueryResponse.result.__sizeRlist; i++) | |
72 std::cout << adbQueryResponse.result.Rlist[i] << " " << adbQueryResponse.result.Dist[i] | |
73 << " " << adbQueryResponse.result.Qpos[i] << " " << adbQueryResponse.result.Spos[i] << std::endl; | |
74 } | |
75 else | |
76 soap_print_fault(&soap,stderr); | |
77 }else | |
78 ;// FIX ME: WRITE NON-SEQUENCE QUERY BY KEY ? | |
79 | |
80 soap_destroy(&soap); | |
81 soap_end(&soap); | |
82 soap_done(&soap); | |
83 } | |
84 | |
51 | 85 |
52 /* Server definitions */ | 86 /* Server definitions */ |
53 int adb__status(struct soap* soap, xsd__string dbName, adb__statusResponse &adbStatusResponse){ | 87 int adb__status(struct soap* soap, xsd__string dbName, adb__statusResponse &adbStatusResponse){ |
54 char* const argv[]={"audioDB",COM_STATUS,"-d",dbName}; | 88 char* const argv[]={"./audioDB",COM_STATUS,"-d",dbName}; |
55 const unsigned argc = 4; | 89 const unsigned argc = 4; |
56 try { | 90 try { |
57 audioDB(argc, argv, &adbStatusResponse); | 91 audioDB(argc, argv, &adbStatusResponse); |
58 return SOAP_OK; | 92 return SOAP_OK; |
59 } catch(char *err) { | 93 } catch(char *err) { |
123 soap_receiver_fault(soap, err, ""); | 157 soap_receiver_fault(soap, err, ""); |
124 return SOAP_FAULT; | 158 return SOAP_FAULT; |
125 } | 159 } |
126 } | 160 } |
127 | 161 |
128 int adb__sequenceQuery(struct soap* soap, xsd__string dbName, xsd__string qKey, | 162 // A sequence query using radius and a query key |
129 adb__sequenceQueryParms *parms, | 163 int adb__sequenceQuery_by_key(struct soap* soap, xsd__string dbName, xsd__string qKey, int qType, |
130 adb__queryResponse &adbQueryResponse) { | 164 adb__sequenceQueryParms* parms, |
131 | 165 adb__queryResponse& adbQueryResponse) { |
166 | |
167 char radiusStr[256]; | |
132 char qPosStr[256]; | 168 char qPosStr[256]; |
133 char pointNNStr[256]; | 169 char pointNNStr[256]; |
134 char trackNNStr[256]; | 170 char trackNNStr[256]; |
135 char seqLenStr[256]; | 171 char seqLenStr[256]; |
136 char relative_thresholdStr[256]; | 172 char relative_thresholdStr[256]; |
137 char absolute_thresholdStr[256]; | 173 char absolute_thresholdStr[256]; |
174 char qtypeStr[256]; | |
138 | 175 |
139 /* When the branch is merged, move this to a header and use it | 176 /* When the branch is merged, move this to a header and use it |
140 elsewhere */ | 177 elsewhere */ |
141 #define INTSTRINGIFY(val, str) \ | 178 #define INTSTRINGIFY(val, str) \ |
142 snprintf(str, 256, "%d", val); | 179 snprintf(str, 256, "%d", val); |
143 #define DOUBLESTRINGIFY(val, str) \ | 180 #define DOUBLESTRINGIFY(val, str) \ |
144 snprintf(str, 256, "%f", val); | 181 snprintf(str, 256, "%f", val); |
145 | 182 |
146 INTSTRINGIFY(parms->qPos, qPosStr); | 183 INTSTRINGIFY(parms->queryPoint, qPosStr); |
147 INTSTRINGIFY(parms->pointNN, pointNNStr); | 184 INTSTRINGIFY(parms->pointNN, pointNNStr); |
148 INTSTRINGIFY(parms->segNN, trackNNStr); | 185 INTSTRINGIFY(parms->trackNN, trackNNStr); |
149 /* FIXME: decide which of segLen and seqLen should live */ | 186 INTSTRINGIFY(parms->sequenceLength, seqLenStr); |
150 INTSTRINGIFY(parms->segLen, seqLenStr); | |
151 | 187 |
152 DOUBLESTRINGIFY(parms->relative_threshold, relative_thresholdStr); | 188 DOUBLESTRINGIFY(parms->relative_threshold, relative_thresholdStr); |
153 DOUBLESTRINGIFY(parms->absolute_threshold, absolute_thresholdStr); | 189 DOUBLESTRINGIFY(parms->absolute_threshold, absolute_thresholdStr); |
154 | 190 DOUBLESTRINGIFY(parms->radius, radiusStr); |
191 | |
192 // WS queries only support 1-nearest neighbour point reporting | |
193 // at the moment, until we figure out how to better serve results | |
194 snprintf(qtypeStr, 256, "nsequence"); | |
195 | |
155 const char *argv[] = { | 196 const char *argv[] = { |
156 "./audioDB", | 197 "./audioDB", |
157 COM_QUERY, | 198 COM_QUERY, |
158 "sequence", | 199 qtypeStr, |
159 COM_DATABASE, | 200 COM_DATABASE, |
160 dbName, | 201 dbName, |
161 COM_FEATURES, | 202 COM_QUERYKEY, |
162 qKey, | 203 ENSURE_STRING(qKey), |
163 COM_KEYLIST, | 204 COM_KEYLIST, |
164 /* FIXME: when this branch is merged, use ENSURE_STRING */ | 205 ENSURE_STRING(parms->keyList), |
165 parms->keyList==0?"":parms->keyList, | |
166 COM_TIMES, | |
167 parms->timesFileName==0?"":parms->timesFileName, | |
168 COM_QUERYPOWER, | |
169 parms->powerFileName==0?"":parms->powerFileName, | |
170 COM_QPOINT, | 206 COM_QPOINT, |
171 qPosStr, | 207 qPosStr, |
172 COM_POINTNN, | 208 COM_POINTNN, |
173 pointNNStr, | 209 pointNNStr, |
174 COM_TRACKNN, | 210 COM_TRACKNN, |
175 trackNNStr, | 211 trackNNStr, |
212 COM_RADIUS, | |
213 radiusStr, | |
176 COM_SEQLEN, | 214 COM_SEQLEN, |
177 seqLenStr, | 215 seqLenStr, |
178 COM_RELATIVE_THRESH, | |
179 relative_thresholdStr, | |
180 COM_ABSOLUTE_THRESH, | 216 COM_ABSOLUTE_THRESH, |
181 absolute_thresholdStr | 217 absolute_thresholdStr |
182 }; | 218 }; |
183 | 219 |
184 const unsigned argc = 25; | 220 const unsigned argc = 21; |
185 | 221 |
186 try { | 222 try { |
187 audioDB(argc, (char* const*)argv, &adbQueryResponse); | 223 audioDB(argc, (char* const*)argv, &adbQueryResponse); |
188 return SOAP_OK; | 224 return SOAP_OK; |
189 } catch (char *err) { | 225 } catch (char *err) { |