summaryrefslogtreecommitdiff
path: root/Libraries/LibIPC
AgeCommit message (Collapse)Author
2020-05-09Meta: Delete empty .cpp filesLinus Groh
2020-05-08LibIPC: Use NonnullOwnPtrVector<Message> in IPC::ServerConnectionAndreas Kling
We never want to store null messages, so make it impossible to do so.
2020-05-03LibIPC: Add a simple IPC::Dictionary type (String key -> String value)Andreas Kling
2020-05-02LibIPC: Abort on connection failureSergey Bugaev
...instead of looping for (effectively) ever. Fixes https://github.com/SerenityOS/serenity/issues/1869
2020-04-05AK: Stop allowing implicit downcast with OwnPtr and NonnullOwnPtrAndreas Kling
Same issue here as we had with RefPtr and NonnullRefPtr. Since we can't make copies of an owning pointer, we don't get quite the same static_ptr_cast<T> here. Instead I've only added a new templated version of OwnPtr::release_nonnull() in this patch, to solve the only issue that popped up. I'm not sure what the best solution here is, but this works for now.
2020-03-29LibIPC+LibGfx: Pass the IPC::Decoder to decoding helpersAndreas Kling
Instead of passing the BufferStream, pass the Decoder. I'd like to stop using BufferStream eventually anyway, so it's good to get it out of any API's where it's in currently.
2020-03-29LibIPC: Add forwarding header for LibIPCAndreas Kling
2020-03-01AK: Remove unnecessary casts to size_t, after Vector changesAndreas Kling
Now that Vector uses size_t, we can remove a whole bunch of redundant casts to size_t.
2020-02-25AK: Make Vector use size_t for its size and capacityAndreas Kling
2020-02-16LibGUI: Add forwarding headerAndreas Kling
This patch adds <LibGUI/Forward.h> and uses it a bunch. It also dragged various header dependency reduction changes into it.
2020-02-15LibIPC+IPCCompiler: Add IPC::Decoder, let classes decode themselvesAndreas Kling
This shaves ~5 seconds off of a full build, not too bad. Also it just seems nicer to push this logic out to classes. It could be better but it's a start. :^)
2020-02-15LibIPC: Move IPC::Encoder functions out of lineAndreas Kling
Compiling anything that includes generated IPC messages is painfully slow at the moment. This moves the encoding helpers out of line, which helps a bit. Doing the same for decoding will help more.
2020-02-15LibIPC+IPCCompiler: Remove some unused members from generated messagesAndreas Kling
2020-02-14LibCore: Add a forward declaration headerAndreas Kling
This patch adds <LibCore/Forward.h> and uses it in various places to shrink the header dependency graph.
2020-02-14AK: Add a forward declaration headerAndreas Kling
You can now #include <AK/Forward.h> to get most of the AK types as forward declarations. Header dependency explosion is one of the main contributors to compile times at the moment, so this is a step towards smaller include graphs.
2020-02-06LibCore: Merge the CSyscallUtils namespace into CoreAndreas Kling
2020-02-06LibCore: Remove leading C from filenamesAndreas Kling
2020-02-06LibIPC: Remove leading I from filenamesAndreas Kling
2020-02-05LibIPC: Remove IPC::Encoder overloads for size_tAndreas Kling
Clients of this code should use explicitly-sized types instead.
2020-02-05LibIPC: Put all classes in the IPC namespace and remove the leading IAndreas Kling
2020-02-05LibIPC: Add support for 64-bit size_t in IEncoderjoshua stein
2020-02-02LibCore: Put all classes in the Core namespace and remove the leading CAndreas Kling
I've been wanting to do this for a long time. It's time we start being consistent about how this stuff works. The new convention is: - "LibFoo" is a userspace library that provides the "Foo" namespace. That's it :^) This was pretty tedious to convert and I didn't even start on LibGUI yet. But it's coming up next.
2020-01-25LibIPC: Short-cirtcuit post_message() if socket already disconnectedAndreas Kling
To allow for more asynchronous teardown of IClientConnection, make the post_message() function simply return if called after the IPC socket has been closed.
2020-01-18Meta: Add license header to source filesAndreas Kling
As suggested by Joshua, this commit adds the 2-clause BSD license as a comment block to the top of every source file. For the first pass, I've just added myself for simplicity. I encourage everyone to add themselves as copyright holders of any file they've added or modified in some significant way. If I've added myself in error somewhere, feel free to replace it with the appropriate copyright holder instead. Going forward, all new source files should include a license header.
2019-12-30LibIPC: Let's start building custom message codecs for LibIPCAndreas Kling
Instead of using ByteBuffer (which always malloc() their storage) for IPC message encoding, we now use a Vector<u8, 1024>, which means that messages smaller than 1 KB avoid heap allocation entirely.
2019-12-20Build: clean up build system, use one shared Makefilejoshua stein
Allow everything to be built from the top level directory with just 'make', cleaned with 'make clean', and installed with 'make install'. Also support these in any particular subdirectory. Specifying 'make VERBOSE=1' will print each ld/g++/etc. command as it runs. Kernel and early host tools (IPCCompiler, etc.) are built as object.host.o so that they don't conflict with other things built with the cross-compiler.
2019-12-16LibIPC: Make sure we always process unhandled messagesAndreas Kling
A client that only ever does synchronous IPC calls from its side would never actually process incoming asynchronous messages since they would arrive while waiting for a synchronous response and then end up sitting forever in the "unhandled messages" queue. We now always handle unhandled messages using a deferred invocation. This fixes the bug where Audio.MenuApplet didn't learn that the muted state changed in response to its own request to change it. :^)
2019-12-07LibIPC: Install libipc.a into /usr/libAndreas Kling
2019-12-06LibIPC: Get client/server PIDs using getsockopt(SO_PEERCRED)Andreas Kling
Instead of passing the PIDs back and forth in a handshake "Greet" message, just use getsockopt(SO_PEERCRED) on both sides to get the same information from the kernel. This is a nice little simplification of the IPC protocol, although it does not get rid of the handshake since we still have to pass the "client ID" from the server to each client so they know how to refer to themselves. This might not be necessary and we might be able to get rid of this later on.
2019-12-02WindowServer: Mark clients as misbehaving when they send invalid dataAndreas Kling
If a client sends an invalid window ID or similar to the WindowServer, we'll now immediately mark them as misbehaving and disconnect them. This might be too aggressive in some cases (window management, ...) but it's just a place to start.
2019-12-02LibIPC: Rename IMessage id/name to message_id/message_nameAndreas Kling
Hogging "id" and "name" makes it impossible to use these as message parameter names, which seems silly. :^)
2019-12-02LibIPC: Don't handle incoming messages right away when drainingAndreas Kling
When draining the socket in IServerConnection, we would previously handle each incoming (local endpoint) message as it came in. This would cause unexpected things to happen while blocked waiting for a synchronous response. That's definitely not what we want, so this patch puts all of the incoming messages in a queue and does a separate pass over the queue to handle everything in order.
2019-12-02LibIPC: Rename base classes to IClientConnection and IServerConnectionAndreas Kling
This matches what we're already calling the server-side subclasses better, though we'll probably want to find some better names for the client-side classes eventually.
2019-12-02LibIPC: Move IPC client/server connection templates to LibIPCAndreas Kling
Move over the CoreIPC::Server and CoreIPC::Client namespace stuff into LibIPC where it will soon becomes LibIPC-style things.
2019-11-23LibIPC+AudioServer: Allow unsolicited server-to-client IPC messagesAndreas Kling
Client-side connection objects must now provide both client and server endpoint types. When a message is received from the server side, we try to decode it using both endpoint types and then send it to the right place for handling. This now makes it possible for AudioServer to send unsolicited messages to its clients. This opens up a ton of possibilities :^)
2019-11-03POSIX compliance: (most) shell scripts converted to generic shellGeorge Pickering
Ports/.port_include.sh, Toolchain/BuildIt.sh, Toolchain/UseIt.sh have been left largely untouched due to use of Bash-exclusive functions and variables such as $BASH_SOURCE, pushd and popd.
2019-09-06AK: Rename <AK/AKString.h> to <AK/String.h>Andreas Kling
This was a workaround to be able to build on case-insensitive file systems where it might get confused about <string.h> vs <String.h>. Let's just not support building that way, so String.h can have an objectively nicer name. :^)
2019-08-03IPCCompiler: More work towards AudioServer bringupAndreas Kling
- Add IEndpoint::handle(IMessage), a big switch table on message type. handle() will return a response message for synchronous messages, and return nullptr otherwise. - Use i32 instead of int for everything - Make IMessage::encode() const - Make IEndpoint::decode_message() static, this allows template code to decode messages without an endpoint instance on hand.
2019-08-03IPCCompiler: Generate getters for message ID's and message namesAndreas Kling
Each endpoint namespace will have an enum class MessageID where you can find all of its messages.
2019-08-03LibIPC: Start fleshing out a separate IPC libraryAndreas Kling
This will be a place to put object serialization/deserialization logic, message parsing, endpoint management, etc.