mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-09-20 20:57:41 +08:00
feat(nopoll): Move nopoll to components
This commit is contained in:
136
components/nopoll/library/nopoll_win32.c
Normal file
136
components/nopoll/library/nopoll_win32.c
Normal file
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* LibNoPoll: A websocket library
|
||||
* Copyright (C) 2013 Advanced Software Production Line, S.L.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this program; if not, write to the Free
|
||||
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
* 02111-1307 USA
|
||||
*
|
||||
* You may find a copy of the license under this software is released
|
||||
* at COPYING file. This is LGPL software: you are welcome to develop
|
||||
* proprietary applications using this library without any royalty or
|
||||
* fee but returning back any change, improvement or addition in the
|
||||
* form of source code, project image, documentation patches, etc.
|
||||
*
|
||||
* For commercial support on build Websocket enabled solutions
|
||||
* contact us:
|
||||
*
|
||||
* Postal address:
|
||||
* Advanced Software Production Line, S.L.
|
||||
* Edificio Alius A, Oficina 102,
|
||||
* C/ Antonio Suarez Nº 10,
|
||||
* Alcalá de Henares 28802 Madrid
|
||||
* Spain
|
||||
*
|
||||
* Email address:
|
||||
* info@aspl.es - http://www.aspl.es/nopoll
|
||||
*/
|
||||
|
||||
#include <nopoll.h>
|
||||
|
||||
#define LOG_DOMAIN "nopoll-win32"
|
||||
|
||||
#if defined(NOPOLL_OS_WIN32)
|
||||
|
||||
nopoll_bool __nopoll_win32_was_init = nopoll_false;
|
||||
|
||||
int nopoll_win32_init (noPollCtx * ctx)
|
||||
{
|
||||
WORD wVersionRequested;
|
||||
WSADATA wsaData;
|
||||
int error;
|
||||
|
||||
if (__nopoll_win32_was_init)
|
||||
return nopoll_true;
|
||||
|
||||
wVersionRequested = MAKEWORD( 2, 2 );
|
||||
|
||||
error = WSAStartup( wVersionRequested, &wsaData );
|
||||
if (error != NO_ERROR) {
|
||||
nopoll_log (ctx, NOPOLL_LEVEL_CRITICAL, "unable to init winsock api, exiting..");
|
||||
return nopoll_false;
|
||||
}
|
||||
nopoll_log (ctx, NOPOLL_LEVEL_DEBUG, "winsock initialization ok");
|
||||
/* flag the library as initialized */
|
||||
__nopoll_win32_was_init = nopoll_true;
|
||||
return nopoll_true;
|
||||
}
|
||||
|
||||
BOOL APIENTRY DllMain (HINSTANCE hInst,
|
||||
DWORD reason,
|
||||
LPVOID reserved)
|
||||
{
|
||||
|
||||
/* always returns true because nopoll init is done through
|
||||
* nopoll_init */
|
||||
return nopoll_true;
|
||||
}
|
||||
|
||||
int __nopoll_win32_blocking_socket_set (NOPOLL_SOCKET socket,
|
||||
int status)
|
||||
{
|
||||
unsigned long enable = status;
|
||||
|
||||
return (ioctlsocket (socket, FIONBIO, &enable) == 0);
|
||||
}
|
||||
|
||||
int nopoll_win32_nonblocking_enable (NOPOLL_SOCKET socket)
|
||||
{
|
||||
return __nopoll_win32_blocking_socket_set (socket, 1);
|
||||
}
|
||||
|
||||
int nopoll_win32_blocking_enable (NOPOLL_SOCKET socket)
|
||||
{
|
||||
return __nopoll_win32_blocking_socket_set (socket, 0);
|
||||
}
|
||||
|
||||
#if ! defined(HAVE_GETTIMEOFDAY)
|
||||
|
||||
|
||||
/**
|
||||
* @brief The function obtains the current time, expressed as seconds
|
||||
* and microseconds since the Epoch, and store it in the timeval
|
||||
* structure pointed to by tv. As posix says gettimeoday should return
|
||||
* zero and should not reserve any value for error, this function
|
||||
* returns zero.
|
||||
*
|
||||
* The timeval struct have the following members:
|
||||
*
|
||||
* \code
|
||||
* struct timeval {
|
||||
* long tv_sec;
|
||||
* long tv_usec;
|
||||
* } timeval;
|
||||
* \endcode
|
||||
*
|
||||
* @param tv Timeval struct.
|
||||
* @param notUsed Not defined.
|
||||
*
|
||||
* @return The function allways return 0.
|
||||
*/
|
||||
int nopoll_win32_gettimeofday(struct timeval *tv, noPollPtr notUsed)
|
||||
{
|
||||
union {
|
||||
long long ns100;
|
||||
FILETIME fileTime;
|
||||
} now;
|
||||
|
||||
GetSystemTimeAsFileTime (&now.fileTime);
|
||||
tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);
|
||||
tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);
|
||||
return (0);
|
||||
} /* end gettimeofday */
|
||||
#endif /* end ! defined(HAVE_GETTIMEOFDAY) */
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user