void DiagramEndPoint::messageDropped( BPoint point, BMessage *message) { D_MESSAGE(("DiagramEndPoint::messageDropped()\n")); switch (message->what) { case M_WIRE_DRAGGED: { D_MESSAGE(("DiagramEndPoint::messageDropped(M_WIRE_DRAGGED)\n")); DiagramEndPoint *endPoint; if ((message->FindPointer("from", reinterpret_cast<void **>(&endPoint)) == B_OK) && (endPoint != this)) { bool success = connectionRequested(endPoint); BMessage dropMsg(M_WIRE_DROPPED); dropMsg.AddPointer("from", reinterpret_cast<void *>(endPoint)); dropMsg.AddPointer("to", reinterpret_cast<void *>(this)); dropMsg.AddBool("success", success); DiagramView* v = view(); BMessenger(v).SendMessage(&dropMsg); if (isConnecting()) { m_connecting = false; disconnected(); } } return; } default: { DiagramItem::messageDropped(point, message); } } }
bool ODBCLib::CODBCSession::startSession() { if(isConnecting()) { return false; } bool result = false; SQLRETURN ret = m_environmentHandle->setVersion(m_ODBCVersion); if(ret == SQL_SUCCESS) { m_connectionHandle.reset(new CConnectionHandle(m_environmentHandle)); if(m_connectionHandle->isHandleEnable()) { ret = m_connectionHandle->connect(connectionString().c_str()); if(ret == SQL_SUCCESS) { m_connectionHandle->setIsolationLevel(SQL_TXN_SS_SNAPSHOT); result = true; } else if(ret == SQL_SUCCESS_WITH_INFO) { m_connectionHandle->setIsolationLevel(SQL_TXN_SS_SNAPSHOT); result = true; // std::wcerr << ODBCLib::CDiagInfo(m_connectionHandle).description() << std::endl; } else { std::wcerr << L"CODBCSession::startSession() CConnectionHandle::connect()=" << ret << std::endl << ODBCLib::CDiagInfo(m_connectionHandle).description() << std::endl; } } } else { std::wcerr << L"CODBCSession::startSession() CEnvironmentHandle::setVersion()=" << ret << std::endl << ODBCLib::CDiagInfo(m_environmentHandle).description() << std::endl; } return result; }
void tlen::openConn() { kdebugf(); if (isConnecting() || User.isEmpty() || Password.isEmpty()) return; state=tlen::ConnectingToHub; socket->connectToHost(hostname, hostport); }
void JabberTransport::setOnlineStatus( const Kopete::OnlineStatus& status , const QString &reason) { #if 0 if( status.status() == Kopete::OnlineStatus::Offline ) { disconnect( Kopete::Account::Manual ); return; } if( isConnecting () ) { errorConnectionInProgress (); return; } XMPP::Status xmppStatus ( "", reason ); switch ( status.internalStatus () ) { case JabberProtocol::JabberFreeForChat: xmppStatus.setShow ( "chat" ); break; case JabberProtocol::JabberOnline: xmppStatus.setShow ( "" ); break; case JabberProtocol::JabberAway: xmppStatus.setShow ( "away" ); break; case JabberProtocol::JabberXA: xmppStatus.setShow ( "xa" ); break; case JabberProtocol::JabberDND: xmppStatus.setShow ( "dnd" ); break; case JabberProtocol::JabberInvisible: xmppStatus.setIsInvisible ( true ); break; } if ( !isConnected () ) { // we are not connected yet, so connect now m_initialPresence = xmppStatus; connect (); } else { setPresence ( xmppStatus ); } #endif }
bool tlen::write( const QDomDocument &d ) { kdebugf(); if( !(isConnected() || isConnecting()) ) { return FALSE; } qDebug()<<"Write:"<<d.toByteArray(); return (socket->write(d.toByteArray()) == (qint64)d.toByteArray().size()); }
bool CClientApp::sendMsg(stMsg* pMsg , uint16_t nLen ) { if ( isConnecting() ) { return m_pNetwork->SendMsg((char*)pMsg,nLen) ; } else { CCLOG("server is disconnected , cann't send msg\n"); } return false ; }
bool TcpSocket::flushSendBuffer() { // Do nothing if buffer is empty if (_sendBuf->isEmpty()) return true; // Do nothing if connection in progress. (until connected) if (isConnecting()) return true; int totalSent = 0; bool blocked = false; // Send blocks of the send buf sequentially for (uint i=0; !blocked && i < _sendBuf->getNumBlocks(); ++i) { uint8* buf = NULL; size_t size = 0; _sendBuf->getBlock(i, buf, size); while (size > 0) { // Chop and feed to underlying API int sent = ::send(_handle, (const char*)buf, size, NIT_SOCKET_SENDRECV_FLAGS); if (sent == SOCKET_ERROR) { int err = getLastError(); if (err == ERR_WOULD_BLOCK) { // All the bytes the underlying API could send has been sent. blocked = true; break; } else return error("UpdateSend", err); } assert(size_t(sent) <= size); buf += sent; totalSent += sent; size -= sent; } } assert(size_t(totalSent) <= _sendBuf->getSize()); // Remove sent bytes from send buf _sendBuf->popFront(totalSent); return true; }
bool ODBCLib::CODBCSession::endSession() { if(!isConnecting()) { return false; } bool result = false; SQLRETURN ret = m_connectionHandle->disconnect(); if(ret == SQL_SUCCESS) { m_connectionHandle.reset(); result = true; } else { std::wcerr << L"CODBCSession::endSession() CConnectionHandle::disconnect()=" << ret << std::endl << ODBCLib::CDiagInfo(m_connectionHandle).description() << std::endl; } return result; }
bool TcpSocket::send(const void* data, size_t size) { const char* buf = (const char*)data; if (isConnecting() || !_sendBuf->isEmpty()) { // If buffering, just add tail to send buf then flush _sendBuf->pushBack(buf, size); return flushSendBuffer(); } if (isConnected()) { // If not buffering, try to send at once int sent = ::send(_handle, buf, size, 0); if (sent == size) return true; if (sent == SOCKET_ERROR) { int err = getLastError(); if (err == ERR_WOULD_BLOCK) sent = 0; else return error("Send", err); } else if (sent == 0) { return error("Disconnected", ERR_CONN_RESET); } assert(size_t(sent) < size); // We have some remainder - save into sendbuf the remaing bytes buf += sent; size -= sent; _sendBuf->pushBack(buf, size); return true; } // Connecting in progress or not connected return false; }
MeanwhileSession::~MeanwhileSession() { HERE; if (isConnected() || isConnecting()) disconnect(); mwSession_removeService(session, mwService_STORAGE); mwSession_removeService(session, mwService_RESOLVE); mwSession_removeService(session, mwService_IM); mwSession_removeService(session, mwService_AWARE); mwAwareList_free(awareList); mwService_free(MW_SERVICE(storageService)); mwService_free(MW_SERVICE(resolveService)); mwService_free(MW_SERVICE(imService)); mwService_free(MW_SERVICE(awareService)); mwCipher_free(mwSession_getCipher(session, mwCipher_RC2_40)); mwCipher_free(mwSession_getCipher(session, mwCipher_RC2_128)); mwSession_free(session); }
// TODO // "<iq type='set' sid='GetRoster'><query xmlns="jabber:iq:auth"/> // </iq>" bool tlen::tlenLogin() { kdebugf(); if(!isConnecting()/*!isConnected()*/) return false; QDomDocument doc; QDomElement iq = doc.createElement( "iq" ); iq.setAttribute( "type", "set" ); iq.setAttribute( "id", sid ); doc.appendChild( iq ); QDomElement query = doc.createElement( "query" ); query.setAttribute( "xmlns", "jabber:iq:auth" ); iq.appendChild( query ); query.appendChild(textNode("username", User.split("@")[0])); query.appendChild(textNode("digest", tlen_hash( Password.toAscii().data(), sid.toAscii().data() ))); query.appendChild(textNode("resource", "w")); // t // w iq jeszcze : <host>tlen.pl</host> return write(doc); }
void DiagramEndPoint::messageDragged( BPoint point, uint32 transit, const BMessage *message) { D_MOUSE(("DiagramEndPoint::messageDragged()\n")); switch (message->what) { case M_WIRE_DRAGGED: { D_MESSAGE(("DiagramEndPoint::messageDragged(M_WIRE_DRAGGED)\n")); switch (transit) { case B_INSIDE_VIEW: { //PRINT((" -> transit: B_INSIDE_VIEW\n")); // this is a WORK-AROUND caused by the unreliability // of BViews DragMessage() routine !! if (isConnecting()) { break; } else if (isConnected()) { view()->trackWire(point); } /* this should be enough in theory: if (!isConnecting()) { view()->trackWire(point); } //break;*/ } case B_ENTERED_VIEW: { //PRINT((" -> transit: B_ENTERED_VIEW\n")); DiagramEndPoint *endPoint; if ((message->FindPointer("from", reinterpret_cast<void **>(&endPoint)) == B_OK) && (endPoint != this)) { if (connectionRequested(endPoint)) { view()->trackWire(connectionPoint()); if (!isConnecting()) { m_connecting = true; connected(); } } else { view()->trackWire(point); if (isConnecting()) { m_connecting = false; disconnected(); } } } break; } case B_EXITED_VIEW: { //PRINT((" -> transit: B_EXITED_VIEW\n")); if (isConnecting()) { m_connecting = false; disconnected(); } break; } } break; } default: { DiagramItem::messageDragged(point, transit, message); } } }
void MediaJack::_drawInto( BView *target, BRect targetRect, int32 layout) { D_METHOD(("MediaJack::_drawInto()\n")); bool selected = isConnecting() || isSelected(); switch (layout) { case MediaRoutingView::M_ICON_VIEW: { if (isInput()) { BRect r; BPoint p; // fill rect r = targetRect; target->SetLowColor(M_GRAY_COLOR); r.left += 2.0; target->FillRect(r, B_SOLID_LOW); // draw connection point r = targetRect; p.Set(0.0, Frame().Height() / 2.0 - 2.0); target->BeginLineArray(4); { target->AddLine(r.LeftTop(), p, M_DARK_GRAY_COLOR); target->AddLine(r.LeftTop() + BPoint(1.0, 0.0), p + BPoint(1.0, 0.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 5.0), r.LeftBottom(), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 5.0), r.LeftBottom() + BPoint(1.0, 0.0), M_LIGHT_GRAY_COLOR); } target->EndLineArray(); if (isConnected() || isConnecting()) { target->BeginLineArray(11); { target->AddLine(p, p, M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 4.0), p + BPoint(0.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 0.0), p + BPoint(4.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 4.0), p + BPoint(4.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 1.0), p + BPoint(4.0, 3.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 1.0), p + BPoint(2.0, 1.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 1.0), p + BPoint(3.0, 1.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 2.0), p + BPoint(2.0, 2.0), selected ? M_LIGHT_BLUE_COLOR : M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 2.0), p + BPoint(3.0, 2.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 3.0), p + BPoint(2.0, 3.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 3.0), p + BPoint(3.0, 3.0), M_MED_GRAY_COLOR); } target->EndLineArray(); } else { target->BeginLineArray(7); { target->AddLine(p, p + BPoint(0.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 0.0), p + BPoint(4.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 4.0), p + BPoint(4.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 1.0), p + BPoint(4.0, 3.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 1.0), p + BPoint(3.0, 1.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 2.0), p + BPoint(3.0, 2.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 3.0), p + BPoint(3.0, 3.0), M_MED_GRAY_COLOR); } target->EndLineArray(); } // draw abbreviation string BFont font(be_plain_font); font_height fh; font.SetSize(font.Size() - 2.0); font.GetHeight(&fh); p.x += 7.0; p.y = (Frame().Height() / 2.0) + (fh.ascent / 2.0); target->SetFont(&font); target->SetDrawingMode(B_OP_OVER); target->SetHighColor((isConnected() || isConnecting()) ? M_MED_GRAY_COLOR : M_DARK_GRAY_COLOR); target->DrawString(m_abbreviation.String(), p); } else if (isOutput()) { BRect r; BPoint p; // fill rect r = targetRect; target->SetLowColor(M_GRAY_COLOR); r.right -= 2.0; target->FillRect(r, B_SOLID_LOW); // draw connection point r = targetRect; p.Set(targetRect.right - 4.0, Frame().Height() / 2.0 - 2.0); target->BeginLineArray(4); { target->AddLine(r.RightTop(), p + BPoint(4.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(r.RightTop() + BPoint(-1.0, 0.0), p + BPoint(3.0, 0.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 5.0), r.RightBottom(), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 5.0), r.RightBottom() + BPoint(-1.0, 0.0), M_MED_GRAY_COLOR); } target->EndLineArray(); if (isConnected() || isConnecting()) { target->BeginLineArray(11); target->AddLine(p + BPoint(4.0, 0.0), p + BPoint(4.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 4.0), p + BPoint(4.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p, p + BPoint(3.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 1.0), p + BPoint(0.0, 3.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 4.0), p + BPoint(3.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 1.0), p + BPoint(1.0, 1.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 1.0), p + BPoint(4.0, 1.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 2.0), p + BPoint(1.0, 2.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 2.0), p + BPoint(4.0, 2.0), selected ? M_LIGHT_BLUE_COLOR : M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 3.0), p + BPoint(1.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 3.0), p + BPoint(4.0, 3.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->EndLineArray(); } else { target->BeginLineArray(7); target->AddLine(p + BPoint(4.0, 0.0), p + BPoint(4.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p, p + BPoint(3.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 1.0), p + BPoint(0.0, 3.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 4.0), p + BPoint(3.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 1.0), p + BPoint(3.0, 1.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 2.0), p + BPoint(3.0, 2.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 3.0), p + BPoint(3.0, 3.0), M_MED_GRAY_COLOR); target->EndLineArray(); } // draw abbreviation string BFont font(be_plain_font); font_height fh; font.SetSize(font.Size() - 2.0); font.GetHeight(&fh); p.x -= font.StringWidth(m_abbreviation.String()) + 2.0; p.y = (Frame().Height() / 2.0) + (fh.ascent / 2.0); target->SetFont(&font); target->SetDrawingMode(B_OP_OVER); target->SetHighColor((isConnected() || isConnecting()) ? M_MED_GRAY_COLOR : M_DARK_GRAY_COLOR); target->DrawString(m_abbreviation.String(), p); } break; } case MediaRoutingView::M_MINI_ICON_VIEW: { if (isInput()) { BRect r; BPoint p; // fill rect r = targetRect; target->SetLowColor(M_GRAY_COLOR); r.top += 2.0; target->FillRect(r, B_SOLID_LOW); // draw connection point r = targetRect; p.Set(Frame().Width() / 2.0 - 2.0, 0.0); target->BeginLineArray(4); { target->AddLine(r.LeftTop(), p, M_DARK_GRAY_COLOR); target->AddLine(r.LeftTop() + BPoint(0.0, 1.0), p + BPoint(0.0, 1.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(5.0, 0.0), r.RightTop(), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(5.0, 1.0), r.RightTop() + BPoint(0.0, 1.0), M_LIGHT_GRAY_COLOR); } target->EndLineArray(); if (isConnected() || isConnecting()) { target->BeginLineArray(11); target->AddLine(p, p, M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 0.0), p + BPoint(4.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 1.0), p + BPoint(0.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 1.0), p + BPoint(4.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 4.0), p + BPoint(3.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 0.0), p + BPoint(1.0, 2.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 3.0), p + BPoint(1.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 0.0), p + BPoint(2.0, 2.0), selected ? M_LIGHT_BLUE_COLOR : M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 3.0), p + BPoint(2.0, 3.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 0.0), p + BPoint(3.0, 2.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 3.0), p + BPoint(3.0, 3.0), M_MED_GRAY_COLOR); target->EndLineArray(); } else { target->BeginLineArray(7); target->AddLine(p, p + BPoint(4.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(0.0, 1.0), p + BPoint(0.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 1.0), p + BPoint(4.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 4.0), p + BPoint(3.0, 4.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 1.0), p + BPoint(1.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 1.0), p + BPoint(2.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 1.0), p + BPoint(3.0, 3.0), M_MED_GRAY_COLOR); target->EndLineArray(); } } else if (isOutput()) { BRect r = targetRect; BPoint p; // fill rect r = targetRect; target->SetLowColor(M_GRAY_COLOR); r.bottom -= 2.0; target->FillRect(r, B_SOLID_LOW); // draw connection point r = targetRect; p.Set(Frame().Width() / 2.0 - 2.0, targetRect.bottom - 4.0); target->BeginLineArray(4); { target->AddLine(r.LeftBottom(), p + BPoint(0.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(r.LeftBottom() + BPoint(0.0, -1.0), p + BPoint(0.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(5.0, 4.0), r.RightBottom(), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(5.0, 3.0), r.RightBottom() + BPoint(0.0, -1.0), M_MED_GRAY_COLOR); } target->EndLineArray(); if (isConnected() || isConnecting()) { target->BeginLineArray(11); target->AddLine(p + BPoint(0.0, 4.0), p + BPoint(0.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 4.0), p + BPoint(4.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p, p + BPoint(0.0, 3.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 0.0), p + BPoint(3.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 0.0), p + BPoint(4.0, 3.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 1.0), p + BPoint(1.0, 1.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 2.0), p + BPoint(1.0, 4.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 1.0), p + BPoint(2.0, 1.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 2.0), p + BPoint(2.0, 4.0), selected ? M_LIGHT_BLUE_COLOR : M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 1.0), p + BPoint(3.0, 1.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 2.0), p + BPoint(3.0, 4.0), selected ? M_BLUE_COLOR : M_DARK_GRAY_COLOR); target->EndLineArray(); } else { target->BeginLineArray(7); target->AddLine(p + BPoint(0.0, 4.0), p + BPoint(4.0, 4.0), M_DARK_GRAY_COLOR); target->AddLine(p, p + BPoint(0.0, 3.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 0.0), p + BPoint(3.0, 0.0), M_DARK_GRAY_COLOR); target->AddLine(p + BPoint(4.0, 0.0), p + BPoint(4.0, 3.0), M_LIGHT_GRAY_COLOR); target->AddLine(p + BPoint(1.0, 1.0), p + BPoint(1.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(2.0, 1.0), p + BPoint(2.0, 3.0), M_MED_GRAY_COLOR); target->AddLine(p + BPoint(3.0, 1.0), p + BPoint(3.0, 3.0), M_MED_GRAY_COLOR); target->EndLineArray(); } } break; } } }
void NetHandler::start() { m_bRunning = true; // first let's increase the limit of open files int maxconn = 100000; struct rlimit srl; srl.rlim_cur = maxconn + 10; srl.rlim_max = maxconn + 10; if (setrlimit(RLIMIT_NOFILE, &srl) < 0) { LOG4CXX_FATAL(logger_, "Cannot set RLimit!"); exit(1); } epfd = epoll_create(maxconn); if (epfd < 0) { LOG4CXX_FATAL(logger_, "epoll_create error!"); exit(1); } // Now let's ignore broken pipes struct sigaction sa; memset(&sa, 0, sizeof (sa)); sa.sa_handler = SIG_IGN; if (sigaction(SIGPIPE, &sa, NULL) < 0) { LOG4CXX_WARN(logger_, "Error ignoring SIGPIPE!"); } if (initSockets() < 0) { exit(1); } struct epoll_event ev, evs[MAX_EVENTS]; LOG4CXX_INFO(logger_, "Nethandler started."); for (; ; ) { if (!m_bRunning) { break; } int count = epoll_wait(epfd, evs, MAX_EVENTS, 1000); if (count < 0) { LOG4CXX_FATAL(logger_, "epoll_wait error!"); } time_t now = Clock::getCurrentSystemTime(); if (!preNetEvent(now)) { LOG4CXX_ERROR(logger_, "PreNetEvent returned false, terminating..."); break; } for (int i = 0; i < count; i++) { int fd = evs[i].data.fd; if (isListenSocket(fd)) { struct sockaddr_in sa; socklen_t slen = sizeof (sa); int nfd = 0; nfd = accept(fd, (struct sockaddr*) &sa, &slen); if (nfd > 0) { ev.events = EPOLLIN | EPOLLHUP; //| EPOLLRDHUP; ev.data.fd = nfd; if (epoll_ctl(epfd, EPOLL_CTL_ADD, nfd, &ev) < 0) { LOG4CXX_ERROR(logger_, "epoll_ctl error, cannot add client!"); } else { size_t rsize = readCacheSize(fd); //size_t rsize = (fd==wsfd ? NetCache::WEBSERVER_READ_SIZE : NetCache::DEFAULT_READ_SIZE); NetCache *cache = addConnection(nfd, sa, rsize); createProtocolHandler(cache, fd); } } } else // data { NetCache *cache = getCacheFromFd(fd); if (cache != NULL) { __uint32_t events = evs[i].events; bool readError = false; if ((events & EPOLLIN) > 0) { int64 uid = cache->uid; readError = !cache->read(); if (!readError) { string req; while (cache->assemble(req) && !cache->remove) { //LOG4CXX_DEBUG(logger_, "Command Received: \"" << req.c_str() << "\" from uid:" << uid << " fd:" << fd); if (cache->ph != NULL) { cache->ph->handle(uid, req); } else { LOG4CXX_ERROR(logger_, "Protocol handler is NULL for fd:" << fd); } } } } if ((events & EPOLLOUT) > 0) { if ( isConnecting( fd )) { connectSuccess( fd ); } else if (cache->write()) { ev.events = EPOLLIN | EPOLLHUP; // | EPOLLRDHUP; ev.data.fd = fd; epoll_ctl(epfd, EPOLL_CTL_MOD, fd, &ev); } } if ((cache->remove && !cache->waitToWrite()) || readError || (events & EPOLLHUP) > 0 || //(events&EPOLLRDHUP)>0 || (events & EPOLLERR) > 0) { int64 uid = cache->uid; if (uid >= 0 && cache->ph != NULL) { cache->ph->leave(uid); } LOG4CXX_DEBUG(logger_, "Client disconnected of fd:" << fd << ", remove: " << cache->remove << ", read error: " << readError << ", hup: " << (events & EPOLLHUP) //<< //", rdhup: " << (events & EPOLLRDHUP) << ", epoll error: " << (events & EPOLLERR)); doCloseConnection(fd); if (isConnectSocket(fd)) { connectFailed(fd); } } } else { LOG4CXX_ERROR(logger_, "Cannot find cache for fd:" << fd); } } } } }