Кто работал с LSP, подскажите..
1. Принцип работы заключается в том, что при получении/отправки пакета, callback-ом вызываются WSPRecv/WSPSend ? Если так, в буфере весь пакет или только данные (payload)? Или вызов этих функций привязан к какому-то внутреннему буферу, накапливающему данные, к которому периодически предоставляется доступ через эти функции?
2. LSP работает в режиме пользователя? При разработке можно использовать функции WinAPI, CryptoAPI?
3. Есть ли какой-нибудь таймаут при обработке данных в WSPRecv/WSPSend? Например, при ожидании семафора или выполнения трудоемкой операции, через какой-нибудь фиксированный промежуток времени пакет отправляется/сбрасывается? Или можно сколько угодно пакет "удерживать"?
4. При изменении пакета нужно самому пересчитывать контрольные суммы? Или все автоматом пересчитывается? Как увеличить размер полезной нагрузки пакета? Вот например функция WSPSend:
int WSPAPI
WSPSend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
---
Как я понимаю пакет находится в буфере на который указывает lpBuffers. Если я хочу переписать буффер мне нужно писать по этому указателю? При превышении dwBufferCount это должно по идее вызвать переполнение. Или это по другому делается?
|