Exemplo n.º 1
0
void* writer_thread(void* limit) {
	for(int i=0;i<*(int*)limit;i++) {
		write_ready();
		randomize();	 
	}
	return 0;
}
Exemplo n.º 2
0
void SerialPort::timeout()
{
    if (d->m_state == Setup){
        if (!SetupComm(d->hPort, 1024, 1024)){
            log(L_WARN, "SetupComm error");
            close();
            emit error();
            return;
        }
        PurgeComm(d->hPort, PURGE_RXABORT | PURGE_RXCLEAR);
        d->m_state = None;
        emit write_ready();
        return;
    }
    if (!EscapeCommFunction(d->hPort, SETDTR)){
        log(L_WARN, "Set DTR error");
        close();
        emit error();
        return;
    }
    DCB dcb;
    memset(&dcb, 0, sizeof(dcb));
    dcb.DCBlength = sizeof(dcb);
    if (GetCommState(d->hPort, &dcb) == 0){
        log(L_WARN, "Get status error");
        close();
        emit error();
        return;
    }
    dcb.fBinary  = TRUE;
    dcb.BaudRate = d->m_baudrate;
    dcb.fParity  = FALSE;
    dcb.Parity   = 0;
    dcb.ByteSize = 8;
    dcb.StopBits = 0;
    if (!d->m_bXonXoff)
    {
        dcb.fInX  = FALSE;
        dcb.fOutX = FALSE;
        dcb.fOutxDsrFlow = FALSE;
        dcb.fOutxCtsFlow = FALSE;
    }
    else
    {
        dcb.fInX  = TRUE;
        dcb.fOutX = TRUE;
        dcb.fOutxDsrFlow = FALSE;
        dcb.fOutxCtsFlow = FALSE;
    }
    dcb.fDtrControl = DTR_CONTROL_ENABLE;
    dcb.fRtsControl = RTS_CONTROL_ENABLE;
    if (SetCommState(d->hPort, &dcb) == 0){
        log(L_WARN, "Set status error");
        close();
        emit error();
        return;
    }
    d->m_state = Setup;
    d->m_timer->start(d->m_time, true);
}
Exemplo n.º 3
0
void SerialPort::timeout()
{
    if (d->m_state == Setup){
        tcflush(d->fd, TCIFLUSH);
        d->m_state = None;
        d->m_notify = new QSocketNotifier(d->fd, QSocketNotifier::Read, this);
        connect(d->m_notify, SIGNAL(activated(int)), this, SLOT(readReady(int)));
        emit write_ready();
        return;
    }
Exemplo n.º 4
0
vector<char> Node::Read(bool& did_read) {
  //If node is being written to tell didRead and return nothing.
  if (is_end() && write_ready()) {
    did_read = false;
    return{};
  }

  vector<char> v(value_.begin(), value_.end());

  write_ready_ = true;
  did_read = true; //Let's not rely on the user initilizing the variable.

  return v;
}
Exemplo n.º 5
0
void ICQClient::sendPacket()
{
    char *packet = writeBuffer.Data(m_nPacketStart);
    *((unsigned short*)(packet + 4)) = htons(writeBuffer.size() - m_nPacketStart - 6);
    dumpPacket(writeBuffer, m_nPacketStart, "Write");
    time(&m_lastTime);
    if ((m_fd == -1) || (m_connecting != Connected)) return;
    fd_set wf;
    FD_ZERO(&wf);
    FD_SET(m_fd, &wf);
    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 0;
    int res = select(m_fd + 1, NULL, &wf, NULL, &tv);
    if (res <= 0) return;
    if (!FD_ISSET(m_fd, &wf)) return;
    write_ready();
}
Exemplo n.º 6
0
bool SerialPort::event(QEvent *e)
{
    if (e->type() != QEvent::User)
        return QObject::event(e);
    switch (static_cast<SerialEvent*>(e)->reason()){
    case EventComplete:{
            DWORD bytes;
            if (GetOverlappedResult(d->hPort, &d->over, &bytes, true)){
                if (d->m_state == Read){
                    d->m_buff.pack(&d->m_char, 1);
                    if (d->m_char == '\n')
                        emit read_ready();
                }
                if (d->m_state == Write){
                    emit write_ready();
                    d->m_state = Read;
                }
                if (d->m_state == Read){
                    d->m_state = StartRead;
                    SetEvent(d->hEvent);
                }
                break;
            }
            close();
            emit error();
            break;
        }
    case EventTimeout:{
            log(L_WARN, "IO timeout");
            CancelIo(d->hPort);
            close();
            emit error();
            break;
        }
    case EventError:{
            log(L_WARN, "IO error");
            close();
            emit error();
        }
    }
    return true;
}
Exemplo n.º 7
0
int main(int argc, char *argv[])
{
	int listenfd;
	struct sockaddr_in serv_addr;

	listenfd = socket(AF_INET, SOCK_STREAM, 0);
	if (listenfd < 0) {
		printf("Unable to open socket: %d (%s)\n", errno, strerror(errno));
		return 1;
	}

	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = INADDR_ANY;
	serv_addr.sin_port = htons(60002);

	if (bind(listenfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
		printf("Unable to bind address: %d (%s)\n", errno, strerror(errno));
		return 1;
	}

	listen(listenfd,5);

	if (fork())
		exit(0);
	setsid();
	if (fork())
		exit(0);

	std::vector<Client> clients;

	while (true) {
		fd_set rfds, wfds;
		FD_ZERO(&rfds);
		FD_ZERO(&wfds);
		int maxfd = 0;
		if (clients.size() < MAX_CLIENTS) {
			FD_SET(listenfd, &rfds);
			maxfd = listenfd;
		}
		for (auto it = clients.begin(), eit = clients.end(); it != eit; ++it) {
			if (it->write_ready()) {
				FD_SET(it->fd, &wfds);
				if (maxfd < it->fd)
					maxfd = it->fd;
			}
			if (it->read_ready()) {
				FD_SET(it->fd, &rfds);
				if (maxfd < it->fd)
					maxfd = it->fd;
			}
		}

		if (select(maxfd+1, &rfds, &wfds, NULL, NULL) < 0) {
			if (errno == EINTR)
				continue;

			syslog(LOG_ERR, "Error in select(): %m");
			break;
		}

		// Process any existing connections.
		for (auto it = clients.begin(), eit = clients.end(); it != eit; ++it) {
			if (FD_ISSET(it->fd, &rfds) || FD_ISSET(it->fd, &wfds))
				it->run_io();
		}

		// Accept New Connections
		if (FD_ISSET(listenfd, &rfds)) {
			struct sockaddr_in client_addr;
			socklen_t client_addr_len = sizeof(client_addr);
			int clientfd = accept(listenfd, reinterpret_cast<struct sockaddr*>(&client_addr), &client_addr_len);

#ifdef IP_ACL_FILE
			if (authorize_ip(ntohl(client_addr.sin_addr.s_addr))) {
#endif
				clients.emplace_back(clientfd);
#ifdef IP_ACL_FILE
			}
			else {
				close(clientfd);
				char ipaddr[16];
				ip2string(ntohl(client_addr.sin_addr.s_addr), ipaddr, 16);
				syslog(LOG_NOTICE, "Connection attempted from unauthorized IP: %s", ipaddr);
			}
#endif
		}
	}
	return 1;
}