| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SSH_PLUGIN_H |
| #define SSH_PLUGIN_H |
| |
| #include <string> |
| #include <map> |
| |
| #include "ppapi/cpp/completion_callback.h" |
| #include "ppapi/cpp/instance.h" |
| #include "ppapi/cpp/var.h" |
| #include "ppapi/cpp/var_array.h" |
| #include "ppapi/cpp/var_dictionary.h" |
| |
| #include "pthread_helpers.h" |
| #include "file_system.h" |
| |
| class SshPluginInstance : public pp::Instance, |
| public OutputInterface { |
| public: |
| explicit SshPluginInstance(PP_Instance instance); |
| virtual ~SshPluginInstance(); |
| |
| virtual void HandleMessage(const pp::Var& message_data); |
| |
| static SshPluginInstance* GetInstance() { return instance_; } |
| pp::Core* core() { return core_; } |
| pthread_t openssh_thread() { return openssh_thread_; } |
| |
| // Implements OutputInterface. |
| virtual bool OpenFile(int fd, const char* name, int mode, |
| InputInterface* stream); |
| virtual bool OpenSocket(int fd, const char* host, uint16_t port, |
| InputInterface* stream); |
| virtual bool Write(int fd, const char* data, size_t size); |
| virtual bool Read(int fd, size_t size); |
| virtual bool Close(int fd); |
| virtual size_t GetWriteWindow(); |
| virtual void SendExitCode(int error); |
| |
| private: |
| typedef std::map<int, InputInterface*> InputStreams; |
| |
| void StartSession(const pp::VarArray& args); |
| void OnOpen(const pp::VarArray& args); |
| void OnRead(const pp::VarArray& args); |
| void OnWriteAcknowledge(const pp::VarArray& args); |
| void OnClose(const pp::VarArray& args); |
| void OnReadReady(const pp::VarArray& args); |
| void OnResize(const pp::VarArray& args); |
| void OnExitAcknowledge(const pp::VarArray& args); |
| |
| void SessionThreadImpl(); |
| static void* SessionThread(void* arg); |
| |
| void Invoke(const std::string& function, const pp::VarArray& args); |
| void InvokeJS(const std::string& function, const pp::VarArray& args); |
| |
| void PrintLog(const std::string& msg); |
| void PrintLogImpl(int32_t result, const std::string& msg); |
| |
| void SendExitCodeImpl(int32_t result, int error); |
| |
| static SshPluginInstance* instance_; |
| |
| pp::Core* core_; |
| pthread_t openssh_thread_; |
| pp::VarDictionary session_args_; |
| pp::CompletionCallbackFactory<SshPluginInstance> factory_; |
| InputStreams streams_; |
| FileSystem file_system_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SshPluginInstance); |
| }; |
| |
| #endif // SSH_PLUGIN_H |