コード例 #1
0
ファイル: mblspec.cpp プロジェクト: n9yty/livecode
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");
    }
}
コード例 #2
0
ファイル: mblspec.cpp プロジェクト: n9yty/livecode
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();
}
コード例 #3
0
ファイル: mblspec.cpp プロジェクト: n9yty/livecode
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();
}
コード例 #4
0
ファイル: mblspec.cpp プロジェクト: n9yty/livecode
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();
}
コード例 #5
0
ファイル: mblspec.cpp プロジェクト: runrevmark/livecode
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();
}