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

Side by Side Diff: mojo/system/transport_data.h

Issue 277083003: Mojo: (Theoretically) implement the read side of platform handle passing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: asdf Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/system/raw_channel_win.cc ('k') | mojo/system/transport_data.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_SYSTEM_TRANSPORT_DATA_H_ 5 #ifndef MOJO_SYSTEM_TRANSPORT_DATA_H_
6 #define MOJO_SYSTEM_TRANSPORT_DATA_H_ 6 #define MOJO_SYSTEM_TRANSPORT_DATA_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <vector> 10 #include <vector>
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 class MOJO_SYSTEM_IMPL_EXPORT TransportData { 72 class MOJO_SYSTEM_IMPL_EXPORT TransportData {
73 public: 73 public:
74 // The maximum size of a single serialized dispatcher. This must be a multiple 74 // The maximum size of a single serialized dispatcher. This must be a multiple
75 // of |kMessageAlignment|. 75 // of |kMessageAlignment|.
76 static const size_t kMaxSerializedDispatcherSize = 10000; 76 static const size_t kMaxSerializedDispatcherSize = 10000;
77 77
78 // The maximum number of platform handles to attach for a single serialized 78 // The maximum number of platform handles to attach for a single serialized
79 // dispatcher. 79 // dispatcher.
80 static const size_t kMaxSerializedDispatcherPlatformHandles = 2; 80 static const size_t kMaxSerializedDispatcherPlatformHandles = 2;
81 81
82 // The maximum possible size of a valid transport data buffer.
83 static const size_t kMaxBufferSize;
84
85 // The maximum total number of platform handles that may be attached.
86 static const size_t kMaxPlatformHandles;
87
82 TransportData(scoped_ptr<DispatcherVector> dispatchers, Channel* channel); 88 TransportData(scoped_ptr<DispatcherVector> dispatchers, Channel* channel);
83 ~TransportData(); 89 ~TransportData();
84 90
85 const void* buffer() const { return buffer_.get(); } 91 const void* buffer() const { return buffer_.get(); }
86 void* buffer() { return buffer_.get(); } 92 void* buffer() { return buffer_.get(); }
87 size_t buffer_size() const { return buffer_size_; } 93 size_t buffer_size() const { return buffer_size_; }
88 94
89 uint32_t platform_handle_table_offset() const { 95 uint32_t platform_handle_table_offset() const {
90 return header()->platform_handle_table_offset; 96 return header()->platform_handle_table_offset;
91 } 97 }
92 98
93 // Gets attached platform-specific handles; this may return null if there are 99 // Gets attached platform-specific handles; this may return null if there are
94 // none. Note that the caller may mutate the set of platform-specific handles. 100 // none. Note that the caller may mutate the set of platform-specific handles.
95 const std::vector<embedder::PlatformHandle>* platform_handles() const { 101 const std::vector<embedder::PlatformHandle>* platform_handles() const {
96 return platform_handles_.get(); 102 return platform_handles_.get();
97 } 103 }
98 std::vector<embedder::PlatformHandle>* platform_handles() { 104 std::vector<embedder::PlatformHandle>* platform_handles() {
99 return platform_handles_.get(); 105 return platform_handles_.get();
100 } 106 }
101 107
102 // Receive-side functions: 108 // Receive-side functions:
103 109
104 // Checks if the given buffer (from the "wire") looks like a valid 110 // Checks if the given buffer (from the "wire") looks like a valid
105 // |TransportData| buffer. (Should only be called if |buffer_size| is 111 // |TransportData| buffer. (Should only be called if |buffer_size| is
106 // nonzero.) Returns null if valid, and a pointer to a human-readable error 112 // nonzero.) Returns null if valid, and a pointer to a human-readable error
107 // message (for debug/logging purposes) on error. Note: This checks the 113 // message (for debug/logging purposes) on error. Note: This checks the
108 // validity of the handle table entries (i.e., does range checking), but does 114 // validity of the handle table entries (i.e., does range checking), but does
109 // not check that the validity of the actual serialized dispatcher 115 // not check that the validity of the actual serialized dispatcher
110 // information. 116 // information.
111 static const char* ValidateBuffer(const void* buffer, size_t buffer_size); 117 static const char* ValidateBuffer(size_t serialized_platform_handle_size,
118 const void* buffer,
119 size_t buffer_size);
120
121 // Gets the platform handle table from a (valid) |TransportData| buffer (which
122 // should have been validated using |ValidateBuffer()| first).
123 static void GetPlatformHandleTable(const void* transport_data_buffer,
124 size_t* num_platform_handles,
125 const void** platform_handle_table);
112 126
113 // Deserializes dispatchers from the given (serialized) transport data buffer 127 // Deserializes dispatchers from the given (serialized) transport data buffer
114 // (typically from a |MessageInTransit::View|). |buffer| should be non-null 128 // (typically from a |MessageInTransit::View|). |buffer| should be non-null
115 // and |buffer_size| should be nonzero. 129 // and |buffer_size| should be nonzero.
116 static scoped_ptr<DispatcherVector> DeserializeDispatchersFromBuffer( 130 static scoped_ptr<DispatcherVector> DeserializeDispatchersFromBuffer(
117 const void* buffer, 131 const void* buffer,
118 size_t buffer_size, 132 size_t buffer_size,
119 Channel* channel); 133 Channel* channel);
120 134
121 private: 135 private:
(...skipping 11 matching lines...) Expand all
133 uint32_t unused; 147 uint32_t unused;
134 }; 148 };
135 149
136 struct HandleTableEntry { 150 struct HandleTableEntry {
137 int32_t type; // From |Dispatcher::Type| (|kTypeUnknown| for "invalid"). 151 int32_t type; // From |Dispatcher::Type| (|kTypeUnknown| for "invalid").
138 uint32_t offset; // Relative to the start of the "secondary buffer". 152 uint32_t offset; // Relative to the start of the "secondary buffer".
139 uint32_t size; // (Not including any padding.) 153 uint32_t size; // (Not including any padding.)
140 uint32_t unused; 154 uint32_t unused;
141 }; 155 };
142 156
143 // The maximum possible size of a valid transport data buffer.
144 static const size_t kMaxBufferSize;
145
146 // The maximum total number of platform handles that may be attached.
147 static const size_t kMaxPlatformHandles;
148
149 const Header* header() const { 157 const Header* header() const {
150 return reinterpret_cast<const Header*>(buffer_.get()); 158 return reinterpret_cast<const Header*>(buffer_.get());
151 } 159 }
152 160
153 size_t buffer_size_; 161 size_t buffer_size_;
154 scoped_ptr<char, base::AlignedFreeDeleter> buffer_; // Never null. 162 scoped_ptr<char, base::AlignedFreeDeleter> buffer_; // Never null.
155 163
156 // Any platform-specific handles attached to this message (for inter-process 164 // Any platform-specific handles attached to this message (for inter-process
157 // transport). The vector (if any) owns the handles that it contains (and is 165 // transport). The vector (if any) owns the handles that it contains (and is
158 // responsible for closing them). 166 // responsible for closing them).
159 // TODO(vtl): With C++11, change it to a vector of |ScopedPlatformHandles|. 167 // TODO(vtl): With C++11, change it to a vector of |ScopedPlatformHandles|.
160 scoped_ptr<std::vector<embedder::PlatformHandle> > platform_handles_; 168 scoped_ptr<std::vector<embedder::PlatformHandle> > platform_handles_;
161 169
162 DISALLOW_COPY_AND_ASSIGN(TransportData); 170 DISALLOW_COPY_AND_ASSIGN(TransportData);
163 }; 171 };
164 172
165 } // namespace system 173 } // namespace system
166 } // namespace mojo 174 } // namespace mojo
167 175
168 #endif // MOJO_SYSTEM_TRANSPORT_DATA_H_ 176 #endif // MOJO_SYSTEM_TRANSPORT_DATA_H_
OLDNEW
« no previous file with comments | « mojo/system/raw_channel_win.cc ('k') | mojo/system/transport_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698