void MCS_loadurl(MCObject *p_object, const char *p_url, const char *p_message) { bool t_success = true; MCSLoadUrlState *t_state = nil; char *t_processed = nil; MCNameRef t_message = nil; t_success = MCMemoryNew(t_state) && MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed) && MCNameCreateWithCString(p_message, t_message); if (t_success) { t_state->url = t_processed; t_state->message = t_message; t_state->status = kMCSystemUrlStatusNone; t_state->object = p_object -> gethandle(); t_state->data . bytes = nil; t_state->data . size = 0; t_success = MCSystemLoadUrl(t_processed, MCS_loadurl_callback, t_state); } if (t_success) MCresult->clear(); else { MCCStringFree(t_processed); MCNameDelete(t_message); MCMemoryDelete(t_state); MCurlresult -> clear(); MCresult->sets("error: load URL failed"); } }
void MCS_downloadurl(MCObject *p_target, const char *p_url, const char *p_file) { bool t_success = true; char *t_processed = nil; MCObjectHandle *t_obj = nil; IO_handle t_output = nil; MCSDownloadUrlState t_state; t_output = MCS_open(p_file, IO_WRITE_MODE, False, False, 0); if (t_output == nil) { MCresult -> sets("can't open that file"); return; } t_success = MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed); if (t_success) t_success = nil != (t_obj = p_target->gethandle()); if (t_success) { t_state . url = t_processed; t_state . status = kMCSystemUrlStatusNone; t_state . object = t_obj; t_state . output = t_output; t_state . length = 0; t_state . total = 0; t_success = MCSystemLoadUrl(t_processed, MCS_downloadurl_callback, &t_state); } if (t_success) { while(t_state . status != kMCSystemUrlStatusFinished && t_state . status != kMCSystemUrlStatusError) MCscreen -> wait(60.0, True, True); if (t_state . status == kMCSystemUrlStatusFinished) MCresult -> clear(); } MCCStringFree(t_processed); if (t_output != nil) MCS_close(t_output); if (t_obj != nil) t_obj->Release(); }
void MCS_posttourl(MCObject *p_target, const MCString& p_data, const char *p_url) { bool t_success = true; char *t_processed = nil; MCObjectHandle *t_obj = nil; MCSPostUrlState t_state; t_success = MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed); if (t_success) t_success = nil != (t_obj = p_target->gethandle()); if (t_success) { t_state . url = t_processed; t_state . status = kMCSystemUrlStatusNone; t_state . object = t_obj; t_state . data . assign_empty(); t_state . post_sent = 0; t_state . post_length = p_data . getlength(); t_success = MCSystemPostUrl(t_processed, p_data.getstring(), p_data.getlength(), MCS_posturl_callback, &t_state); } if (t_success) { MCurlresult -> clear(); while(t_state . status != kMCSystemUrlStatusFinished && t_state . status != kMCSystemUrlStatusError) MCscreen -> wait(60.0, True, True); if (t_state . status == kMCSystemUrlStatusFinished) { MCurlresult -> getvalue() . exchange(t_state . data); MCresult -> clear(); } else { MCurlresult -> clear(); MCresult -> getvalue() . exchange(t_state . data); } } MCCStringFree(t_processed); if (t_obj != nil) t_obj -> Release(); }
void MCS_putintourl(MCObject *p_target, const MCString& p_data, const char *p_url) { bool t_success = true; char *t_processed = nil; MCObjectHandle *t_obj = nil; MCSPutUrlState t_state; t_success = MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed); if (t_success) t_success = nil != (t_obj = p_target->gethandle()); if (t_success) { t_state.url = t_processed; t_state.status = kMCSystemUrlStatusNone; t_state.object = t_obj; t_state.put_sent = 0; t_state.put_length = p_data.getlength(); t_success = MCSystemPutUrl(t_processed, p_data . getstring(), p_data . getlength(), MCS_puturl_callback, &t_state); } if (t_success); { MCurlresult->clear(); while (t_state.status != kMCSystemUrlStatusUploaded && t_state.status != kMCSystemUrlStatusError) MCscreen->wait(60.0, True, True); if (t_state.status == kMCSystemUrlStatusUploaded) MCresult->clear(); else MCresult->sets(MCString(t_state.error)); } MCCStringFree(t_processed); if (t_obj != nil) t_obj->Release(); }
void MCS_geturl(MCObject *p_target, const char *p_url) { char *t_processed_url; t_processed_url = nil; // IM-2013-07-30: [[ Bug 10800 ]] strip whitespace chars from url before attempting to fetch if (!MCSystemProcessUrl(p_url, kMCSystemUrlOperationStrip, t_processed_url)) return; MCSGetUrlState t_state; t_state . url = t_processed_url; t_state . status = kMCSystemUrlStatusNone; t_state . object = p_target -> gethandle(); t_state . data . assign_empty(); if (!MCSystemLoadUrl(t_processed_url, MCS_geturl_callback, &t_state)) { t_state . object -> Release(); return; } MCurlresult -> clear(); while(t_state . status != kMCSystemUrlStatusFinished && t_state . status != kMCSystemUrlStatusError) MCscreen -> wait(60.0, True, True); MCurlresult -> getvalue() . exchange(t_state . data); if (t_state . status == kMCSystemUrlStatusFinished) { MCresult -> clear(); } else { MCresult -> getvalue() . exchange(t_state . error); } MCCStringFree(t_processed_url); t_state . object -> Release(); }