Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1420)

Unified Diff: talk/examples/peerconnection/server/main.cc

Issue 1235563006: Move talk/examples/* to webrtc/examples. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 201508051337 Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/examples/peerconnection/server/main.cc
diff --git a/talk/examples/peerconnection/server/main.cc b/talk/examples/peerconnection/server/main.cc
deleted file mode 100644
index 0d0b98e2bcbdf37b9df6c7214a1a5856d526955f..0000000000000000000000000000000000000000
--- a/talk/examples/peerconnection/server/main.cc
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * libjingle
- * Copyright 2011 Google Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <vector>
-
-#include "talk/examples/peerconnection/server/data_socket.h"
-#include "talk/examples/peerconnection/server/peer_channel.h"
-#include "talk/examples/peerconnection/server/utils.h"
-#include "webrtc/base/flags.h"
-
-DEFINE_bool(help, false, "Prints this message");
-DEFINE_int(port, 8888, "The port on which to listen.");
-
-static const size_t kMaxConnections = (FD_SETSIZE - 2);
-
-void HandleBrowserRequest(DataSocket* ds, bool* quit) {
- assert(ds && ds->valid());
- assert(quit);
-
- const std::string& path = ds->request_path();
-
- *quit = (path.compare("/quit") == 0);
-
- if (*quit) {
- ds->Send("200 OK", true, "text/html", "",
- "<html><body>Quitting...</body></html>");
- } else if (ds->method() == DataSocket::OPTIONS) {
- // We'll get this when a browsers do cross-resource-sharing requests.
- // The headers to allow cross-origin script support will be set inside
- // Send.
- ds->Send("200 OK", true, "", "", "");
- } else {
- // Here we could write some useful output back to the browser depending on
- // the path.
- printf("Received an invalid request: %s\n", ds->request_path().c_str());
- ds->Send("500 Sorry", true, "text/html", "",
- "<html><body>Sorry, not yet implemented</body></html>");
- }
-}
-
-int main(int argc, char** argv) {
- rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
- if (FLAG_help) {
- rtc::FlagList::Print(NULL, false);
- return 0;
- }
-
- // Abort if the user specifies a port that is outside the allowed
- // range [1, 65535].
- if ((FLAG_port < 1) || (FLAG_port > 65535)) {
- printf("Error: %i is not a valid port.\n", FLAG_port);
- return -1;
- }
-
- ListeningSocket listener;
- if (!listener.Create()) {
- printf("Failed to create server socket\n");
- return -1;
- } else if (!listener.Listen(FLAG_port)) {
- printf("Failed to listen on server socket\n");
- return -1;
- }
-
- printf("Server listening on port %i\n", FLAG_port);
-
- PeerChannel clients;
- typedef std::vector<DataSocket*> SocketArray;
- SocketArray sockets;
- bool quit = false;
- while (!quit) {
- fd_set socket_set;
- FD_ZERO(&socket_set);
- if (listener.valid())
- FD_SET(listener.socket(), &socket_set);
-
- for (SocketArray::iterator i = sockets.begin(); i != sockets.end(); ++i)
- FD_SET((*i)->socket(), &socket_set);
-
- struct timeval timeout = { 10, 0 };
- if (select(FD_SETSIZE, &socket_set, NULL, NULL, &timeout) == SOCKET_ERROR) {
- printf("select failed\n");
- break;
- }
-
- for (SocketArray::iterator i = sockets.begin(); i != sockets.end(); ++i) {
- DataSocket* s = *i;
- bool socket_done = true;
- if (FD_ISSET(s->socket(), &socket_set)) {
- if (s->OnDataAvailable(&socket_done) && s->request_received()) {
- ChannelMember* member = clients.Lookup(s);
- if (member || PeerChannel::IsPeerConnection(s)) {
- if (!member) {
- if (s->PathEquals("/sign_in")) {
- clients.AddMember(s);
- } else {
- printf("No member found for: %s\n",
- s->request_path().c_str());
- s->Send("500 Error", true, "text/plain", "",
- "Peer most likely gone.");
- }
- } else if (member->is_wait_request(s)) {
- // no need to do anything.
- socket_done = false;
- } else {
- ChannelMember* target = clients.IsTargetedRequest(s);
- if (target) {
- member->ForwardRequestToPeer(s, target);
- } else if (s->PathEquals("/sign_out")) {
- s->Send("200 OK", true, "text/plain", "", "");
- } else {
- printf("Couldn't find target for request: %s\n",
- s->request_path().c_str());
- s->Send("500 Error", true, "text/plain", "",
- "Peer most likely gone.");
- }
- }
- } else {
- HandleBrowserRequest(s, &quit);
- if (quit) {
- printf("Quitting...\n");
- FD_CLR(listener.socket(), &socket_set);
- listener.Close();
- clients.CloseAll();
- }
- }
- }
- } else {
- socket_done = false;
- }
-
- if (socket_done) {
- printf("Disconnecting socket\n");
- clients.OnClosing(s);
- assert(s->valid()); // Close must not have been called yet.
- FD_CLR(s->socket(), &socket_set);
- delete (*i);
- i = sockets.erase(i);
- if (i == sockets.end())
- break;
- }
- }
-
- clients.CheckForTimeout();
-
- if (FD_ISSET(listener.socket(), &socket_set)) {
- DataSocket* s = listener.Accept();
- if (sockets.size() >= kMaxConnections) {
- delete s; // sorry, that's all we can take.
- printf("Connection limit reached\n");
- } else {
- sockets.push_back(s);
- printf("New connection...\n");
- }
- }
- }
-
- for (SocketArray::iterator i = sockets.begin(); i != sockets.end(); ++i)
- delete (*i);
- sockets.clear();
-
- return 0;
-}
« no previous file with comments | « talk/examples/peerconnection/server/data_socket.cc ('k') | talk/examples/peerconnection/server/peer_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698