Loading lib/gopher.c +21 −4 Original line number Diff line number Diff line Loading @@ -121,8 +121,8 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) curl_off_t *bytecount = &data->req.bytecount; char *path = data->state.path; char *sel; ssize_t amount, k; *done = TRUE; /* unconditionally */ Loading @@ -149,12 +149,29 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) return CURLE_OUT_OF_MEMORY; } result = Curl_sendf(sockfd, conn, "%s\r\n", sel); if(result) { /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is sent, which could be sizeable with long selectors. */ k = strlen(sel); for(;;) { result = Curl_write(conn, sockfd, sel, k, &amount); if (CURLE_OK == result) { /* Which may not have written it all! */ k -= amount; sel += amount; if (k < 1) break; /* but it did write it all */ } else { failf(data, "Failed sending Gopher request"); return result; } } /* We can use Curl_sendf to send the terminal \r\n relatively safely and save allocing another string/doing another _write loop. */ result = Curl_sendf(sockfd, conn, "\r\n"); if (result != CURLE_OK) { failf(data, "Failed sending Gopher request"); return result; } Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL); /* no upload */ return CURLE_OK; Loading tests/data/Makefile.am +39 −38 Original line number Diff line number Diff line Loading @@ -19,30 +19,30 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test505 test74 test75 test76 test77 test78 test147 test148 test506 test79 \ test80 test81 test82 test83 test84 test85 test86 test87 test507 test149 \ test88 test89 test90 test508 test91 test92 test203 test93 test94 test95 \ test510 test97 test98 test99 test150 test151 test152 test153 \ test154 test155 test156 test157 test158 test159 test511 test160 test161 \ test162 test163 test164 test512 test165 test166 test167 test168 test169 \ test170 test171 test172 test204 test205 test173 test174 test175 test176 \ test177 test513 test514 test178 test179 test180 test181 test182 test183 \ test184 test185 test186 test187 test188 test189 test191 test192 test193 \ test194 test195 test196 test197 test198 test515 test516 test517 test518 \ test210 test211 test212 test220 test221 test222 test223 test224 test206 \ test207 test208 test209 test213 test240 test241 test242 test519 test214 \ test215 test216 test217 test218 test199 test225 test226 test227 test228 \ test229 test233 test234 test235 test236 test520 test237 test238 test239 \ test243 test245 test246 test247 test248 test249 test250 test251 test252 \ test253 test254 test255 test521 test522 test523 test256 test257 test258 \ test259 test260 test261 test262 test263 test264 test265 test266 test267 \ test268 test269 test270 test271 test272 test273 test274 test275 test524 \ test525 test276 test277 test526 test527 test528 test530 DISABLED test278 \ test279 test531 test280 test529 test532 test533 test534 test535 test281 \ test537 test282 test283 test284 test538 test285 test286 test307 test308 \ test287 test400 test288 test600 test601 test602 test603 test401 test402 \ test290 test291 test292 test293 test403 test404 test405 test604 test605 \ test606 test607 test608 test609 test294 test295 test296 test297 test298 \ test610 test611 test612 test406 test407 test408 test409 test613 test614 \ test700 test701 test702 test704 test705 test703 test706 test707 test350 \ test351 test352 test353 test289 test540 test354 test231 test1000 test1001 \ test510 test97 test98 test99 test150 test151 test152 test153 test154 \ test155 test156 test157 test158 test159 test511 test160 test161 test162 \ test163 test164 test512 test165 test166 test167 test168 test169 test170 \ test171 test172 test204 test205 test173 test174 test175 test176 test177 \ test513 test514 test178 test179 test180 test181 test182 test183 test184 \ test185 test186 test187 test188 test189 test191 test192 test193 test194 \ test195 test196 test197 test198 test515 test516 test517 test518 test210 \ test211 test212 test220 test221 test222 test223 test224 test206 test207 \ test208 test209 test213 test240 test241 test242 test519 test214 test215 \ test216 test217 test218 test199 test225 test226 test227 test228 test229 \ test233 test234 test235 test236 test520 test237 test238 test239 test243 \ test245 test246 test247 test248 test249 test250 test251 test252 test253 \ test254 test255 test521 test522 test523 test256 test257 test258 test259 \ test260 test261 test262 test263 test264 test265 test266 test267 test268 \ test269 test270 test271 test272 test273 test274 test275 test524 test525 \ test276 test277 test526 test527 test528 test530 DISABLED test278 test279 \ test531 test280 test529 test532 test533 test534 test535 test281 test537 \ test282 test283 test284 test538 test285 test286 test307 test308 test287 \ test400 test288 test600 test601 test602 test603 test401 test402 test290 \ test291 test292 test293 test403 test404 test405 test604 test605 test606 \ test607 test608 test609 test294 test295 test296 test297 test298 test610 \ test611 test612 test406 test407 test408 test409 test613 test614 test700 \ test701 test702 test704 test705 test703 test706 test707 test350 test351 \ test352 test353 test289 test540 test354 test231 test1000 test1001 \ test1002 test1003 test1004 test1005 test1006 test615 test1007 test541 \ test1010 test1011 test1012 test542 test543 test536 test1008 test1009 \ test2000 test2001 test2002 test2003 test35 test544 test545 test2004 \ Loading @@ -60,14 +60,15 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 \ test1080 test1081 test1082 test1083 test1084 test1085 test633 test634 \ test635 test636 test637 test558 test559 test1086 test1087 test1088 \ test574 test575 test576 test577 test1113 test1114 \ test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096 \ test1097 test560 test561 test1098 test1099 test562 test563 test1100 \ test564 test1101 test1102 test1103 test1104 test299 test310 test311 \ test312 test1105 test565 test800 test1106 test801 test566 test802 test803 \ test1107 test1108 test1109 test1110 test1111 test1112 test129 test567 \ test568 test569 test570 test571 test572 test804 test805 test806 test807 \ test573 test313 test1115 test578 test579 test1116 test574 test575 test576 test577 test1113 test1114 test1089 test1090 \ test1091 test1092 test1093 test1094 test1095 test1096 test1097 test560 \ test561 test1098 test1099 test562 test563 test1100 test564 test1101 \ test1102 test1103 test1104 test299 test310 test311 test312 test1105 \ test565 test800 test1106 test801 test566 test802 test803 test1107 \ test1108 test1109 test1110 test1111 test1112 test129 test567 test568 \ test569 test570 test571 test572 test804 test805 test806 test807 test573 \ test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \ test1203 filecheck: @mkdir test-place; \ Loading tests/data/test1200 0 → 100644 +40 −0 Original line number Diff line number Diff line # Gopher directory fetch <testcase> <info> <keywords> GOPHER INDEX </keywords> </info> # # Server-side <reply> <datacheck> iMenu results error.host 1 0Selector /bar bar.foo.invalid 70 . </datacheck> </reply> # Client-side <client> <server> gopher </server> <name> Gopher index </name> <command> gopher://%HOSTIP:%GOPHERPORT </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> </protocol> </verify> </testcase> tests/data/test1201 0 → 100644 +40 −0 Original line number Diff line number Diff line # Gopher selector fetch <testcase> <info> <keywords> GOPHER SELECTOR </keywords> </info> # # Server-side <reply> <datacheck> iMenu results error.host 1 0Selector /selector/SELECTOR /bar bar.foo.invalid 70 . </datacheck> </reply> # Client-side <client> <server> gopher </server> <name> Gopher selector </name> <command> gopher://%HOSTIP:%GOPHERPORT/1/selector/SELECTOR </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> /selector/SELECTOR </protocol> </verify> </testcase> tests/data/test1202 0 → 100644 +41 −0 Original line number Diff line number Diff line # Gopher query fetch <testcase> <info> <keywords> GOPHER QUERY </keywords> </info> # # Server-side <reply> <datacheck> iSearch results error.host 1 0Query query succeeded /foo foo.bar.invalid 70 0Selector /the/search/engine /bar bar.foo.invalid 70 . </datacheck> </reply> # Client-side <client> <server> gopher </server> <name> Gopher query </name> <command> gopher://%HOSTIP:%GOPHERPORT/7/the/search/engine?query%20succeeded </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> /the/search/engine query succeeded </protocol> </verify> </testcase> Loading
lib/gopher.c +21 −4 Original line number Diff line number Diff line Loading @@ -121,8 +121,8 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) curl_off_t *bytecount = &data->req.bytecount; char *path = data->state.path; char *sel; ssize_t amount, k; *done = TRUE; /* unconditionally */ Loading @@ -149,12 +149,29 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) return CURLE_OUT_OF_MEMORY; } result = Curl_sendf(sockfd, conn, "%s\r\n", sel); if(result) { /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is sent, which could be sizeable with long selectors. */ k = strlen(sel); for(;;) { result = Curl_write(conn, sockfd, sel, k, &amount); if (CURLE_OK == result) { /* Which may not have written it all! */ k -= amount; sel += amount; if (k < 1) break; /* but it did write it all */ } else { failf(data, "Failed sending Gopher request"); return result; } } /* We can use Curl_sendf to send the terminal \r\n relatively safely and save allocing another string/doing another _write loop. */ result = Curl_sendf(sockfd, conn, "\r\n"); if (result != CURLE_OK) { failf(data, "Failed sending Gopher request"); return result; } Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL); /* no upload */ return CURLE_OK; Loading
tests/data/Makefile.am +39 −38 Original line number Diff line number Diff line Loading @@ -19,30 +19,30 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test505 test74 test75 test76 test77 test78 test147 test148 test506 test79 \ test80 test81 test82 test83 test84 test85 test86 test87 test507 test149 \ test88 test89 test90 test508 test91 test92 test203 test93 test94 test95 \ test510 test97 test98 test99 test150 test151 test152 test153 \ test154 test155 test156 test157 test158 test159 test511 test160 test161 \ test162 test163 test164 test512 test165 test166 test167 test168 test169 \ test170 test171 test172 test204 test205 test173 test174 test175 test176 \ test177 test513 test514 test178 test179 test180 test181 test182 test183 \ test184 test185 test186 test187 test188 test189 test191 test192 test193 \ test194 test195 test196 test197 test198 test515 test516 test517 test518 \ test210 test211 test212 test220 test221 test222 test223 test224 test206 \ test207 test208 test209 test213 test240 test241 test242 test519 test214 \ test215 test216 test217 test218 test199 test225 test226 test227 test228 \ test229 test233 test234 test235 test236 test520 test237 test238 test239 \ test243 test245 test246 test247 test248 test249 test250 test251 test252 \ test253 test254 test255 test521 test522 test523 test256 test257 test258 \ test259 test260 test261 test262 test263 test264 test265 test266 test267 \ test268 test269 test270 test271 test272 test273 test274 test275 test524 \ test525 test276 test277 test526 test527 test528 test530 DISABLED test278 \ test279 test531 test280 test529 test532 test533 test534 test535 test281 \ test537 test282 test283 test284 test538 test285 test286 test307 test308 \ test287 test400 test288 test600 test601 test602 test603 test401 test402 \ test290 test291 test292 test293 test403 test404 test405 test604 test605 \ test606 test607 test608 test609 test294 test295 test296 test297 test298 \ test610 test611 test612 test406 test407 test408 test409 test613 test614 \ test700 test701 test702 test704 test705 test703 test706 test707 test350 \ test351 test352 test353 test289 test540 test354 test231 test1000 test1001 \ test510 test97 test98 test99 test150 test151 test152 test153 test154 \ test155 test156 test157 test158 test159 test511 test160 test161 test162 \ test163 test164 test512 test165 test166 test167 test168 test169 test170 \ test171 test172 test204 test205 test173 test174 test175 test176 test177 \ test513 test514 test178 test179 test180 test181 test182 test183 test184 \ test185 test186 test187 test188 test189 test191 test192 test193 test194 \ test195 test196 test197 test198 test515 test516 test517 test518 test210 \ test211 test212 test220 test221 test222 test223 test224 test206 test207 \ test208 test209 test213 test240 test241 test242 test519 test214 test215 \ test216 test217 test218 test199 test225 test226 test227 test228 test229 \ test233 test234 test235 test236 test520 test237 test238 test239 test243 \ test245 test246 test247 test248 test249 test250 test251 test252 test253 \ test254 test255 test521 test522 test523 test256 test257 test258 test259 \ test260 test261 test262 test263 test264 test265 test266 test267 test268 \ test269 test270 test271 test272 test273 test274 test275 test524 test525 \ test276 test277 test526 test527 test528 test530 DISABLED test278 test279 \ test531 test280 test529 test532 test533 test534 test535 test281 test537 \ test282 test283 test284 test538 test285 test286 test307 test308 test287 \ test400 test288 test600 test601 test602 test603 test401 test402 test290 \ test291 test292 test293 test403 test404 test405 test604 test605 test606 \ test607 test608 test609 test294 test295 test296 test297 test298 test610 \ test611 test612 test406 test407 test408 test409 test613 test614 test700 \ test701 test702 test704 test705 test703 test706 test707 test350 test351 \ test352 test353 test289 test540 test354 test231 test1000 test1001 \ test1002 test1003 test1004 test1005 test1006 test615 test1007 test541 \ test1010 test1011 test1012 test542 test543 test536 test1008 test1009 \ test2000 test2001 test2002 test2003 test35 test544 test545 test2004 \ Loading @@ -60,14 +60,15 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 \ test1080 test1081 test1082 test1083 test1084 test1085 test633 test634 \ test635 test636 test637 test558 test559 test1086 test1087 test1088 \ test574 test575 test576 test577 test1113 test1114 \ test1089 test1090 test1091 test1092 test1093 test1094 test1095 test1096 \ test1097 test560 test561 test1098 test1099 test562 test563 test1100 \ test564 test1101 test1102 test1103 test1104 test299 test310 test311 \ test312 test1105 test565 test800 test1106 test801 test566 test802 test803 \ test1107 test1108 test1109 test1110 test1111 test1112 test129 test567 \ test568 test569 test570 test571 test572 test804 test805 test806 test807 \ test573 test313 test1115 test578 test579 test1116 test574 test575 test576 test577 test1113 test1114 test1089 test1090 \ test1091 test1092 test1093 test1094 test1095 test1096 test1097 test560 \ test561 test1098 test1099 test562 test563 test1100 test564 test1101 \ test1102 test1103 test1104 test299 test310 test311 test312 test1105 \ test565 test800 test1106 test801 test566 test802 test803 test1107 \ test1108 test1109 test1110 test1111 test1112 test129 test567 test568 \ test569 test570 test571 test572 test804 test805 test806 test807 test573 \ test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \ test1203 filecheck: @mkdir test-place; \ Loading
tests/data/test1200 0 → 100644 +40 −0 Original line number Diff line number Diff line # Gopher directory fetch <testcase> <info> <keywords> GOPHER INDEX </keywords> </info> # # Server-side <reply> <datacheck> iMenu results error.host 1 0Selector /bar bar.foo.invalid 70 . </datacheck> </reply> # Client-side <client> <server> gopher </server> <name> Gopher index </name> <command> gopher://%HOSTIP:%GOPHERPORT </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> </protocol> </verify> </testcase>
tests/data/test1201 0 → 100644 +40 −0 Original line number Diff line number Diff line # Gopher selector fetch <testcase> <info> <keywords> GOPHER SELECTOR </keywords> </info> # # Server-side <reply> <datacheck> iMenu results error.host 1 0Selector /selector/SELECTOR /bar bar.foo.invalid 70 . </datacheck> </reply> # Client-side <client> <server> gopher </server> <name> Gopher selector </name> <command> gopher://%HOSTIP:%GOPHERPORT/1/selector/SELECTOR </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> /selector/SELECTOR </protocol> </verify> </testcase>
tests/data/test1202 0 → 100644 +41 −0 Original line number Diff line number Diff line # Gopher query fetch <testcase> <info> <keywords> GOPHER QUERY </keywords> </info> # # Server-side <reply> <datacheck> iSearch results error.host 1 0Query query succeeded /foo foo.bar.invalid 70 0Selector /the/search/engine /bar bar.foo.invalid 70 . </datacheck> </reply> # Client-side <client> <server> gopher </server> <name> Gopher query </name> <command> gopher://%HOSTIP:%GOPHERPORT/7/the/search/engine?query%20succeeded </command> </client> # # Verify data after the test has been "shot" <verify> <protocol> /the/search/engine query succeeded </protocol> </verify> </testcase>