LINUX.ORG.RU

Сообщения XJess

 

Помогите перенести код HTTP API с Win на Linux curllib

Форум — Development

Привет всем!

Занимаюсь переносом с Win класса, который занимается посылкой запросов HTTP GET/POST на сервер с помощью WinInet HTTP API, на Linux с помощью curllib. Надеюсь, модераторы пожалеют и не удалят сообщение, хотя оно и не очень связано с Linux - просто я уверена, что здесь есть люди, которые занимались этой библиотекой в Linux. Использую easy interface.

1. В HTTP API можно использовать ::GetLastError() для получения ошибки. Можно ли в curllib просто получить код последней ошибки или там такого нет? Видела, что есть опция для curl_easy_setopt CURLOPT_ERRORBUFFER - можно задать буффер для приема сообщения об ошибке. А можно ли просто получить код?

2. Есть ли аналог InternetOpen? Я так понимаю, что инициализация либы - это просто вызов curl_easy_init - Start a libcurl easy session

он же инициализирует сессию?

Просто в HTTP API делается 2 вызова (взято из MSDN): InternetOpen - Initializes an application's use of the WinINet functions.

InternetConnect - Opens an File Transfer Protocol (FTP), Gopher, or HTTP session for a given site.

Кстати, в последнем вызове задается еще и адрес сервера.

Вообщем, правильно ли я понимаю, что в curllib эти 2 вызова сводятся к curl_easy_init, а, куда коннектиться, указывается потом через опции, скажем, CURLOPT_URL?

3. Правильно ли я понимаю, что CURLOPT_PROXYUSERPWD == INTERNET_OPTION_PROXY_USERNAME + INTERNET_OPTION_PROXY_PASSWORD ? (это опции curl_easy_setopt/InternetSetOption)

INTERNET_OPTION_PROXY_USERNAME - Sets or retrieves a string value that contains the user name used to access the proxy.

INTERNET_OPTION_PROXY_PASSWORD - Sets or retrieves a string value that contains the password used to access the proxy.

4. Нужны аналоги опций HTTP API: INTERNET_OPTION_CONNECT_TIMEOUT - Sets or retrieves an unsigned long integer value that contains the time-out value, in milliseconds, to use for Internet connection requests. If a connection request takes longer than this time-out value, the request is canceled. When attempting to connect to multiple IP addresses for a single host (a multihome host), the timeout limit is cumulative for all of the IP addresses.

INTERNET_OPTION_RECEIVE_TIMEOUT - Sets or retrieves an unsigned long integer value that contains the time-out value, in milliseconds, to receive a response to a request. If the response takes longer than this time-out value, the request is canceled.

INTERNET_OPTION_SEND_TIMEOUT - Sets or retrieves an unsigned long integer value that contains the time-out value to send a request. Units are in milliseconds. If the send takes longer than this time-out value, the send is canceled.

Я нашла только эти: CURLOPT_TIMEOUT (CURLOPT_TIMEOUT_MS)

Pass a long as parameter containing the maximum time in seconds that you allow the libcurl transfer operation to take. Normally, name lookups can take a considerable time and limiting operations to less than a few minutes risk aborting perfectly normal operations. This option will cause curl to use the SIGALRM to enable time-outing system calls.

In unix-like systems, this might cause signals to be used unless CURLOPT_NOSIGNAL is set.

CURLOPT_CONNECTTIMEOUT (CURLOPT_CONNECTTIMEOUT_MS)

Pass a long. It should contain the maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once it has connected, this option is of no more use. Set to zero to disable connection timeout (it will then only timeout on the system's internal timeouts). See also the CURLOPT_TIMEOUT option.

In unix-like systems, this might cause signals to be used unless CURLOPT_NOSIGNAL is set.

Не очень понятно, чему соответствует CURLOPT_TIMEOUT? Это все время запроса, т. е. отправка + получение?

Вообщем, непонятно, как задать в curllib INTERNET_OPTION_RECEIVE_TIMEOUT + INTERNET_OPTION_SEND_TIMEOUT.

5. Есть ли аналог HttpOpenRequest + HttpSendRequest? Правильно я понимаю, что нужно просто сделать curl_easy_perform с предварительной установкой нужных опций через curl_easy_setopt?

6. Как в curllib разруливаются ситуации, когда хост, с которого посылаются запросы, будет иметь, скажем, 5 ip адресов, например, но нужно будет отправлять запросы с определенного адреса?

XJess
()

Проблема при линковки программы, использующей libcurl

Форум — Development

Привет всем!

Есть программа на С++ под Linux. Собираю в KDevelop. На стадии линковки выдает следующее:

/prog/router_daemon/src/RLHttp.cpp:352: undefined reference to `curl_easy_getinfo'

и на другие функции libcurl тоже ругается аналогично.

Я так понимаю, что нужно либу как-то ей подсунуть. А как и где это задать, не знаю. Сорри, нубик я в линуксе пока еще. Может, кто подскажет.

XJess
()

Вопрос про atomic_inc*

Форум — Development

Привет всем! Хочу понять одну вещь - если использовать функции типа atomic_inc* из юзер спэйса в Линуксе (C++, это будет использоваться в демоне), то они будут работать или лучше все-таки что-то другое использовать? Просто мне на одном форуме человек сказал, что это кернальные функции и в юзер спэйсе все это работать не будет, и мнения разделились на эту тему.

XJess
()

Какой libcurl качать под Cent OS 5.3?

Форум — Development

Добрый день!

На сайте libcurl в разделе download есть пакеты для многих систем, но конкретно под Cent OS нет. Никто не знает, какой под нее лучше взять? Может, кто-то занимался этим вопросом? Не хочется качать что-то не то, что только замусорит систему. libcurl мне нужен для замены виндового HTTP API, GET/POST методы. Или посоветуйте, плиз, что-то другое под Cent OS, если уже есть более подходящее для таких целей под эту ось.

XJess
()

Есть ли в Linux функции max, min?

Форум — Development

Привет всем!

Собственно, сабж. Такое чувство, что этих функций нет в моем Linux. man max тоже ничего не дает. Неужели самой определять нужно?

XJess
()

Странность с __stdcall

Форум — Development

Привет всем!

Совершенно ламерский вопрос, наверное... но придется его задать. У меня в классе есть 2 метода:

static void PASCAL Method1();

static int PASCAL Method2();

KDevelop при компиляции выдает следюущее:

/root/prog/router_daemon/src/StringA.h:249: error: variable or field ‘__stdcall’ declared void

/root/prog/router_daemon/src/StringA.h:249: error: expected ‘;’ before ‘Method1’

/root/prog/router_daemon/src/StringA.h:250: error: expected ‘;’ before ‘Method2’

Кто-нибудь может мне объяснить, что это может значить??? В винде такой код компилируется совершенно спокойно...

Использую Cent OS 5.3, KDevelop C/C++.

XJess
()

Есть ли в Cent OS функции atomic_inc*?

Форум — Development

Добрый день! Раскопала, что есть функции atomic_inc/atomic_dec, которые являются аналогами InterlockedIncrement/Dec в винде. Но в моей Cent OS такое ощущение, что их нет.

Компилятор ругается на #include <atomic.h>, что, мол де, такого файла нет и на функции тоже.

Может, я что-то не так делаю? Или их там просто нет. man atomic_inc тоже пишет, что нет такого...

XJess
()

Помогите перенести код с Win на Linux

Форум — Development

Добрый день всем! Я в Linux совсем новенькая, но мне дали задание по переносу кода с Win на Linux. Есть некая часть платформенно-зависимого кода. Хотелось бы, чтобы коллеги помогли, а то не знаю, куда копать. Надеюсь, что здесь есть люди, которые и в винде понимают и помогут перенести. Есть некий набор классов, которые мне нужно переписать под Linux.

1. Есть, например, класс CString (строка соответственно), но там везде используется TCHAR. Вопрос - есть ли под Linux какой-то подобный тип или нужно тупо самой его вводить?

#ifndef _TCHAR_DEFINED #if !__STDC__ typedef wchar_t TCHAR; #endif #define _TCHAR_DEFINED #endif

2. Также в коде используется макрос ASSERT из MFC. Я так понимаю, что его можно заменить на assert из CRT? Еще используется VERIFY из MFC. Тоже вопрос, чем его можно заменить? Аналогии в CRT что-то не вижу.

3. Есть ли в Linux аналог GetModuleFileName (известен HANDLE)?

4. va_list и иже с ним, я так понимаю, имеются?

5. Есть класс CMutex, который на самом деле внутри виндовая критическая секция. Соответственно, вопрос, есть ли в Linux аналог InitializeCriticalSection, DeleteCriticalSection, EnterCriticalSection, LeaveCriticalSection, TryEnterCriticalSection, структуры CRITICAL_SECTION? Желательно, без posix обойтись, если можно. До меня дошли слухи, что можно и без него.

6. Есть ли аналог MessageBox, CreateFile, CloseHandle, WriteFile, ReadFile, GetFileSize, SetFilePointer, MultiByteToWideChar (CP_ACP), WideCharToMultiByte, GetLocalTime?

7. Есть ли аналог ресурсов в файле, как в винде? И соответствено есть ли аналоги функций для работы с ресурсами FindResourceEx, SizeofResource, LoadResource, LockResource?

8. Есть ли аналоги QueryPerformanceCounter? Есть такой класс таймера - там этот вызов активно используется:

__int64 CTimer::m_frequency = CRLTimer::Init();

void CTimer::Start() { VERIFY(::QueryPerformanceCounter((LARGE_INTEGER*)&m_tStart)!=0); }

void CTimer::Stop() { VERIFY(::QueryPerformanceCounter((LARGE_INTEGER*)&m_tTime)!=0); m_tTime -= m_tStart; }

double CTimer::GetElapsedSeconds() { __int64 tTime; VERIFY(::QueryPerformanceCounter((LARGE_INTEGER*)&tTime)!=0); tTime -= m_tStart; return ((double)tTime/m_frequency); }

__int64 CTimer::Init() { VERIFY(::QueryPerformanceFrequency((LARGE_INTEGER*)&m_frequency)!=0); return m_frequency; }

Или, может, есть идеи, как его еще переписать, если в Linux нет чего-то подобного счетчикам производительности?

9. Есть ли вызовы, подобные InterlockedIncrement, InterlockedDecrement, lstrlen, функция типа _tcschr и иже с ними _t*?

XJess
()

RSS подписка на новые темы