static shared_ptr<PixelTransferBuffer> addressToPTB(const NetAddress& addr) { std::string str = std::string("HTTP://") + addr.ipString() + ":" + format("%d", addr.port()); debugAssert(str.size() <= 28); QRcode* qrcode = encode(str.c_str(), (int)str.size()); const int N = qrcode->width; shared_ptr<PixelTransferBuffer> buffer = CPUPixelTransferBuffer::create(N, N, ImageFormat::L8()); unorm8* dst = reinterpret_cast<unorm8*>(buffer->mapWrite()); const unsigned char* src = qrcode->data; const unorm8 BLACK = unorm8::fromBits(0x00); const unorm8 WHITE = unorm8::fromBits(0xFF); for (int i = 0; i < N * N; ++i) { // The bytes are in the opposite convention dst[i] = (src[i] & 1) ? BLACK : WHITE; } dst = NULL; buffer->unmap(); QRcode_free(qrcode); return buffer; }
//----------------------------------------------------------------------------- bool TCPSocket::connect(const NetAddress& destination) { int sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sd <= 0) { os::printf("Failed to open socket\n"); m_socket = 0; return false; } m_socket = sd; sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = htonl(destination.address()); address.sin_port = htons(destination.port()); if (::connect(sd, (const sockaddr*)&address, sizeof(sockaddr_in)) < 0) { os::printf("Failed to connect socket\n"); close(); return false; } return true; }