void EVShield::init(SH_Protocols protocol) { while (initCounter < 5){ //Serial.println(initCounter); I2CTimer(); initProtocols(protocol); } }
UT_OPENSSL(void, setAlpnProtos)(JNIEnv *e, jobject o, jlong ctx, jobjectArray alpn_protos) { if(ssl_methods.SSL_CTX_set_alpn_protos == NULL) { return; } tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *); TCN_ASSERT(ctx != 0); UNREFERENCED(o); if (initProtocols(e, c, &c->alpn_proto_data, &c->alpn_proto_len, alpn_protos) == 0) { ssl_methods.SSL_CTX_set_alpn_protos(c->ctx, c->alpn_proto_data, c->alpn_proto_len); } }
DWORD PipeReader::startServer() { SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = FALSE; CreateMyDACL(&sa); wchar_t temp[300]; swprintf(temp,L"\\\\.\\pipe\\%s",pipeName); HANDLE _pipe=CreateNamedPipe(temp,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,0,0,0,&sa); swprintf(temp,L"\\\\.\\pipe\\%s",pipeEventName); HANDLE _eventpipe=CreateNamedPipe(temp,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,0,0,0,&sa); wchar_t log[300]; swprintf(log,L"[BixVReader]Pipe created:%s:%p",pipeName,_pipe); OutputDebugString(log); while (true) { //__try { BOOL ris=ConnectNamedPipe(_pipe,NULL); if (ris==0) { swprintf(log,L"[BixVReader]Pipe NOT connected:%x",GetLastError()); OutputDebugString(log); } else { swprintf(log,L"[BixVReader]Pipe connected"); OutputDebugString(log); } ris=ConnectNamedPipe(_eventpipe,NULL); if (ris==0) { swprintf(log,L"[BixVReader]Event Pipe NOT connected:%x",GetLastError()); OutputDebugString(log); } else { swprintf(log,L"[BixVReader]Event Pipe connected"); OutputDebugString(log); } pipe=_pipe; eventpipe=_eventpipe; if (!waitInsertIpr.empty()) { // if I'm waiting for card insertion, verify if there's a card present if (initProtocols()) { SectionLocker lock(device->m_RequestLock); while (!waitInsertIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitInsertIpr.back(); if (ipr->UnmarkCancelable()==S_OK) { ipr->CompleteWithInformation(STATUS_SUCCESS, 0); } waitInsertIpr.pop_back(); } state=SCARD_SWALLOWED; } } while (true) { // wait for a command DWORD command=0; DWORD read=0; if (!ReadFile(eventpipe,&command,sizeof(DWORD),&read,NULL)) { state=SCARD_ABSENT; OutputDebugString(L"[BixVReader]Pipe error"); powered=0; pipe=NULL; eventpipe=NULL; if (!waitRemoveIpr.empty()) { // card inserted SectionLocker lock(device->m_RequestLock); while (!waitRemoveIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitRemoveIpr.back(); OutputDebugString(L"[BixVReader]complete Wait Remove"); if (ipr->UnmarkCancelable()==S_OK) { OutputDebugString(L"[BixVReader]Wait Remove Unmarked"); ipr->CompleteWithInformation(STATUS_SUCCESS, 0); OutputDebugString(L"[BixVReader]Wait Remove Completed"); } waitRemoveIpr.pop_back(); } } if (!waitInsertIpr.empty()) { // card removed SectionLocker lock(device->m_RequestLock); while (!waitInsertIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitInsertIpr.back(); OutputDebugString(L"[BixVReader]cancel Wait Remove"); if (ipr->UnmarkCancelable()==S_OK) { OutputDebugString(L"[BixVReader]Wait Insert Unmarked"); ipr->CompleteWithInformation(HRESULT_FROM_WIN32(ERROR_CANCELLED), 0); OutputDebugString(L"[BixVReader]Wait Insert Cancelled"); } waitInsertIpr.pop_back(); } } DisconnectNamedPipe(_pipe); DisconnectNamedPipe(_eventpipe); break; } OutputDebugString(L"[BixVReader]Pipe data"); if (command==0) powered=0; if (command==0 && !waitRemoveIpr.empty()) { // card removed SectionLocker lock(device->m_RequestLock); state=SCARD_ABSENT; while (!waitRemoveIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitRemoveIpr.back(); if (ipr->UnmarkCancelable()==S_OK) ipr->CompleteWithInformation(STATUS_SUCCESS, 0); waitRemoveIpr.pop_back(); } } else if (command==1 && !waitInsertIpr.empty()) { // card inserted SectionLocker lock(device->m_RequestLock); state=SCARD_SWALLOWED; initProtocols(); while (!waitInsertIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitInsertIpr.back(); if (ipr->UnmarkCancelable()==S_OK) ipr->CompleteWithInformation(STATUS_SUCCESS, 0); waitInsertIpr.pop_back(); } } } //} //__except(EXCEPTION_EXECUTE_HANDLER) { // wchar_t log[300]; // DWORD err=GetExceptionCode(); // swprintf(log,L"Exception:%08X",err); // OutputDebugString(log); //} } OutputDebugString(L"[BixVReader]Pipe quit!!!"); return 0; }
DWORD TcpIpReader::startServer() { breakSocket=false; wchar_t log[300]; while (true) { //__try { fd_set readfds; FD_ZERO(&readfds); // Set server socket to set FD_SET(socket, &readfds); // Timeout parameter timeval tv = { 0 }; tv.tv_sec = 5; while(true) { if (breakSocket) return 0; FD_SET(socket, &readfds); int ret = select(0, &readfds, NULL, NULL, &tv); if (ret > 0) break; if (ret<0) { DWORD err=WSAGetLastError(); swprintf(log,L"[BixVReader]wsa err:%x",err); OutputDebugString(log); if (err==0x2736) { socket=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0); sockaddr_in Service; Service.sin_family = AF_INET; Service.sin_addr.s_addr = inet_addr("127.0.0.1"); Service.sin_port = htons((u_short)(port)); bind(socket, (SOCKADDR *) &Service, sizeof (Service)); listen(socket, 1); FD_ZERO(&readfds); // Set server socket to set FD_SET(socket, &readfds); } } } SOCKET AcceptEventSocket; AcceptSocket = accept(socket, NULL, NULL); closesocket(socket); socket=NULL; if (AcceptSocket == INVALID_SOCKET) return 0; swprintf(log,L"[BixVReader]Socket connected:%i",AcceptSocket); OutputDebugString(log); FD_ZERO(&readfds); // Set server socket to set FD_SET(eventsocket, &readfds); while(true) { if (breakSocket) return 0; FD_SET(eventsocket, &readfds); int ret = select(0, &readfds, NULL, NULL, &tv); if (ret > 0) break; if (ret<0) { DWORD err=WSAGetLastError(); swprintf(log,L"[BixVReader]wsa err:%x",err); OutputDebugString(log); if (err==0x2736) { eventsocket=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0); sockaddr_in eventService; eventService.sin_family = AF_INET; eventService.sin_addr.s_addr = inet_addr("127.0.0.1"); eventService.sin_port = htons((u_short)(eventPort)); bind(eventsocket, (SOCKADDR *) &eventService, sizeof (eventService)); listen(eventsocket, 1); FD_ZERO(&readfds); // Set server socket to set FD_SET(eventsocket, &readfds); } } } AcceptEventSocket = accept(eventsocket, NULL, NULL); closesocket(eventsocket); eventsocket=NULL; if (AcceptEventSocket == INVALID_SOCKET) return 0; swprintf(log,L"[BixVReader]Event Socket connected:%i",AcceptEventSocket); OutputDebugString(log); if (!waitInsertIpr.empty()) { // if I'm waiting for card insertion, verify if there's a card present if (initProtocols()) { SectionLocker lock(device->m_RequestLock); while (!waitInsertIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitInsertIpr.back(); if (ipr->UnmarkCancelable()==S_OK) { ipr->CompleteWithInformation(STATUS_SUCCESS, 0); } waitInsertIpr.pop_back(); } state=SCARD_SWALLOWED; } } while (true) { // wait for a command DWORD command=0; int read=0; if ((read=recv(AcceptEventSocket,(char*)&command,sizeof(DWORD),MSG_WAITALL))<=0) { state=SCARD_ABSENT; OutputDebugString(L"[BixVReader]Socket error"); powered=0; ::shutdown(AcceptSocket,SD_BOTH); ::shutdown(AcceptEventSocket,SD_BOTH); if (!waitRemoveIpr.empty()) { // card inserted SectionLocker lock(device->m_RequestLock); while (!waitRemoveIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitRemoveIpr.back(); OutputDebugString(L"[BixVReader]complete Wait Remove"); if (ipr->UnmarkCancelable()==S_OK) { OutputDebugString(L"[BixVReader]Wait Remove Unmarked"); ipr->CompleteWithInformation(STATUS_SUCCESS, 0); OutputDebugString(L"[BixVReader]Wait Remove Completed"); } waitRemoveIpr.pop_back(); } } if (!waitInsertIpr.empty()) { // card removed SectionLocker lock(device->m_RequestLock); while (!waitInsertIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitInsertIpr.back(); OutputDebugString(L"[BixVReader]cancel Wait Remove"); if (ipr->UnmarkCancelable()==S_OK) { OutputDebugString(L"[BixVReader]Wait Insert Unmarked"); ipr->CompleteWithInformation(HRESULT_FROM_WIN32(ERROR_CANCELLED), 0); OutputDebugString(L"[BixVReader]Wait Insert Cancelled"); } waitInsertIpr.pop_back(); } } break; } OutputDebugString(L"[BixVReader]Socket data"); if (command==0) powered=0; if (command==0 && !waitRemoveIpr.empty()) { // card removed SectionLocker lock(device->m_RequestLock); state=SCARD_ABSENT; while (!waitRemoveIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitRemoveIpr.back(); if (ipr->UnmarkCancelable()==S_OK) ipr->CompleteWithInformation(STATUS_SUCCESS, 0); waitRemoveIpr.pop_back(); } } else if (command==1 && !waitInsertIpr.empty()) { // card inserted SectionLocker lock(device->m_RequestLock); state=SCARD_SWALLOWED; initProtocols(); while (!waitInsertIpr.empty()) { CComPtr<IWDFIoRequest> ipr = waitInsertIpr.back(); if (ipr->UnmarkCancelable()==S_OK) ipr->CompleteWithInformation(STATUS_SUCCESS, 0); waitInsertIpr.pop_back(); } } } //} //__except(EXCEPTION_EXECUTE_HANDLER) { // wchar_t log[300]; // DWORD err=GetExceptionCode(); // swprintf(log,L"Exception:%08X",err); // OutputDebugString(log); //} } OutputDebugString(L"[BixVReader]Socket quit!!!"); return 0; }