//////////////////////////////////////////////////////////////////////////////// // Copyright 2018 Google LLC. // // This software is licensed under the terms defined in the Widevine Master // License Agreement. For a copy of this agreement, please contact // widevine-licensing@google.com. //////////////////////////////////////////////////////////////////////////////// // Example client for demonstrating network calls to public/simulcrypt_server. #include #include #include #include #include #include #include #include #include #include "gflags/gflags.h" #include "glog/logging.h" DEFINE_string(server, "", "Server host name"); DEFINE_int32(port, 0, "Server port number"); constexpr uint32_t kBufferSize = 256; int main(int argc, char **argv) { gflags::ParseCommandLineFlags(&argc, &argv, true); CHECK(!FLAGS_server.empty()) << "need --server"; CHECK(FLAGS_port != 0) << "need --port"; struct hostent server; { int buflen = 1024; char buf[1024]; struct hostent *result; int h_errnop; gethostbyname_r(/* __name= */ FLAGS_server.c_str(), /* __result_buf= */ &server, /* __buf= */ buf, /* __buflen= */ buflen, /* __result= */ &result, /* __h_errnop= */ &h_errnop); } struct sockaddr_in server_addr; bzero(reinterpret_cast(&server_addr), sizeof(server_addr)); server_addr.sin_family = AF_INET; // TODO(user): Consider using inet_pton() to populate server_addr.sin_addr. bcopy(server.h_addr, reinterpret_cast(&server_addr.sin_addr.s_addr), server.h_length); server_addr.sin_port = htons(FLAGS_port); int socket_fd = socket(AF_INET, SOCK_STREAM, /* protocol= */ 0); CHECK(socket_fd >= 0) << "failed to opening socket"; CHECK(connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) >= 0) << "failed to connect to socket"; printf("Please enter the message: "); char buffer[kBufferSize]; bzero(buffer, kBufferSize); fgets(buffer, kBufferSize - 1, stdin); int total_bytes_written = 0; while (total_bytes_written != strlen(buffer)) { int num_bytes_written = write(socket_fd, buffer, strlen(buffer)); if (num_bytes_written < 0) { LOG(FATAL) << "ERROR writing to socket: " << strerror(errno); } total_bytes_written += num_bytes_written; } bzero(buffer, kBufferSize); if (read(socket_fd, buffer, kBufferSize - 1) < 0) { LOG(FATAL) << "ERROR reading from socket: " << strerror(errno); } printf("Read from buffer: %s\n", buffer); close(socket_fd); return 0; }