12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/udp_socket_private_resource.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/logging.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/ppb_udp_socket.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ppapi {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace proxy {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UDPSocketPrivateResource::UDPSocketPrivateResource(Connection connection,
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   PP_Instance instance)
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : UDPSocketResourceBase(connection, instance, true) {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UDPSocketPrivateResource::~UDPSocketPrivateResource() {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)thunk::PPB_UDPSocket_Private_API*
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UDPSocketPrivateResource::AsPPB_UDPSocket_Private_API() {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return this;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::SetSocketFeature(
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_UDPSocketFeature_Private name,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_Var value) {
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PP_UDPSocket_Option public_name = PP_UDPSOCKET_OPTION_ADDRESS_REUSE;
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  switch (name) {
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case PP_UDPSOCKETFEATURE_PRIVATE_ADDRESS_REUSE:
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      // |public_name| has been initialized above.
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      break;
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case PP_UDPSOCKETFEATURE_PRIVATE_BROADCAST:
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      public_name = PP_UDPSOCKET_OPTION_BROADCAST;
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      break;
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case PP_UDPSOCKETFEATURE_PRIVATE_COUNT:
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      return PP_ERROR_BADARGUMENT;
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    default:
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NOTREACHED();
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      return PP_ERROR_BADARGUMENT;
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int32_t result = SetOptionImpl(public_name, value, NULL);
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return result == PP_OK_COMPLETIONPENDING ? PP_OK : result;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::Bind(
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const PP_NetAddress_Private* addr,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return BindImpl(addr, callback);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool UDPSocketPrivateResource::GetBoundAddress(PP_NetAddress_Private* addr) {
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return GetBoundAddressImpl(addr);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::RecvFrom(
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    char* buffer,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int32_t num_bytes,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return RecvFromImpl(buffer, num_bytes, NULL, callback);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool UDPSocketPrivateResource::GetRecvFromAddress(
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_NetAddress_Private* addr) {
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return GetRecvFromAddressImpl(addr);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t UDPSocketPrivateResource::SendTo(
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* buffer,
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int32_t num_bytes,
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const PP_NetAddress_Private* addr,
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_refptr<TrackedCallback> callback) {
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return SendToImpl(buffer, num_bytes, addr, callback);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UDPSocketPrivateResource::Close() {
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CloseImpl();
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace proxy
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ppapi
84