#include <config.h>
#include "Server.h"
-#include "debug.h"
#include "FuncRequest.h"
#include "LyXAction.h"
#include "LyXFunc.h"
+
#include "frontends/Application.h"
+#include "support/debug.h"
#include "support/FileName.h"
#include "support/lstrings.h"
-#include "support/lyxlib.h"
#include <boost/bind.hpp>
#endif
#include <fcntl.h>
+using namespace std;
+using namespace lyx::support;
namespace lyx {
-using support::compare;
-using support::FileName;
-using support::rtrim;
-using support::split;
-using support::unlink;
-
-using std::endl;
-using std::string;
-
-
/////////////////////////////////////////////////////////////////////
//
// LyXComm
#if !defined (HAVE_MKFIFO)
// We provide a stub class that disables the lyxserver.
-LyXComm(std::string const &, Server *, ClientCallbackfct)
+LyXComm::LyXComm(string const &, Server *, ClientCallbackfct)
{}
void LyXComm::openConnection()
#else // defined (HAVE_MKFIFO)
-LyXComm::LyXComm(std::string const & pip, Server * cli, ClientCallbackfct ccb)
+LyXComm::LyXComm(string const & pip, Server * cli, ClientCallbackfct ccb)
: pipename_(pip), client_(cli), clientcb_(ccb)
{
ready_ = false;
void LyXComm::openConnection()
{
- LYXERR(Debug::LYXSERVER) << "LyXComm: Opening connection" << endl;
+ LYXERR(Debug::LYXSERVER, "LyXComm: Opening connection");
// If we are up, that's an error
if (ready_) {
ready_ = false;
if (pipename_.empty()) {
- LYXERR(Debug::LYXSERVER)
- << "LyXComm: server is disabled, nothing to do"
- << endl;
+ LYXERR(Debug::LYXSERVER, "LyXComm: server is disabled, nothing to do");
return;
}
// We made it!
ready_ = true;
- LYXERR(Debug::LYXSERVER) << "LyXComm: Connection established" << endl;
+ LYXERR(Debug::LYXSERVER, "LyXComm: Connection established");
}
/// Close pipes
void LyXComm::closeConnection()
{
- LYXERR(Debug::LYXSERVER) << "LyXComm: Closing connection" << endl;
+ LYXERR(Debug::LYXSERVER, "LyXComm: Closing connection");
if (pipename_.empty()) {
- LYXERR(Debug::LYXSERVER)
- << "LyXComm: server is disabled, nothing to do"
- << endl;
+ LYXERR(Debug::LYXSERVER, "LyXComm: server is disabled, nothing to do");
return;
}
if (!ready_) {
- lyxerr << "LyXComm: Already disconnected" << endl;
+ LYXERR0("LyXComm: Already disconnected");
return;
}
if (fd < 0) {
lyxerr << "LyXComm: Could not open pipe " << filename << '\n'
<< strerror(errno) << endl;
- unlink(filename);
+ filename.removeFile();
return -1;
}
<< '\n' << strerror(errno) << endl;
}
- if (unlink(FileName(filename)) < 0) {
+ if (FileName(filename).removeFile() < 0) {
lyxerr << "LyXComm: Could not remove pipe " << filename
<< '\n' << strerror(errno) << endl;
}
// the delim /wasn't/ found. ?:-P
string cmd;
read_buffer_= split(read_buffer_, cmd,'\n');
- LYXERR(Debug::LYXSERVER)
- << "LyXComm: status:" << status
+ LYXERR(Debug::LYXSERVER, "LyXComm: status:" << status
<< ", read_buffer_:" << read_buffer_
- << ", cmd:" << cmd << endl;
+ << ", cmd:" << cmd);
if (!cmd.empty())
clientcb_(client_, cmd);
//\n or not \n?
return;
}
if (errno != 0) {
- lyxerr << "LyXComm: " << strerror(errno) << endl;
+ LYXERR0("LyXComm: " << strerror(errno));
if (!read_buffer_.empty()) {
- lyxerr << "LyXComm: truncated command: "
- << read_buffer_ << endl;
+ LYXERR0("LyXComm: truncated command: " << read_buffer_);
read_buffer_.erase();
}
break; // reset connection
void LyXComm::send(string const & msg)
{
if (msg.empty()) {
- lyxerr << "LyXComm: Request to send empty string. Ignoring."
- << endl;
+ LYXERR0("LyXComm: Request to send empty string. Ignoring.");
return;
}
- LYXERR(Debug::LYXSERVER) << "LyXComm: Sending '" << msg << '\'' << endl;
+ LYXERR(Debug::LYXSERVER, "LyXComm: Sending '" << msg << '\'');
if (pipename_.empty()) return;
if (!ready_) {
- lyxerr << "LyXComm: Pipes are closed. Could not send "
- << msg << endl;
+ LYXERR0("LyXComm: Pipes are closed. Could not send " << msg);
} else if (::write(outfd_, msg.c_str(), msg.length()) < 0) {
lyxerr << "LyXComm: Error sending message: " << msg
<< '\n' << strerror(errno)
server->callback(msg);
}
-Server::Server(LyXFunc * f, std::string const & pipes)
+Server::Server(LyXFunc * f, string const & pipes)
: numclients_(0), func_(f), pipes_(pipes, this, &ServerCallback)
{}
}
+int compare(char const * a, char const * b, unsigned int len)
+{
+ using namespace std;
+ return strncmp(a, b, len);
+}
+
+
// Handle data gotten from communication, called by LyXComm
void Server::callback(string const & msg)
{
- LYXERR(Debug::LYXSERVER) << "Server: Received: '"
- << msg << '\'' << endl;
+ LYXERR(Debug::LYXSERVER, "Server: Received: '" << msg << '\'');
char const * p = msg.c_str();
if (*p) ++p;
}
- LYXERR(Debug::LYXSERVER)
- << "Server: Client: '" << client
- << "' Command: '" << cmd
- << "' Argument: '" << arg << '\'' << endl;
+ LYXERR(Debug::LYXSERVER, "Server: Client: '" << client
+ << "' Command: '" << cmd << "' Argument: '" << arg << '\'');
// --- lookup and exec the command ------------------
if (cmd == "hello") {
// One more client
if (numclients_ == MAX_CLIENTS) { //paranoid check
- LYXERR(Debug::LYXSERVER)
- << "Server: too many clients..."
- << endl;
+ LYXERR(Debug::LYXSERVER, "Server: too many clients...");
return;
}
int i = 0;
clients_[i] = client;
++numclients_;
buf = "LYXSRV:" + client + ":hello\n";
- LYXERR(Debug::LYXSERVER)
- << "Server: Greeting "
- << client << endl;
+ LYXERR(Debug::LYXSERVER, "Server: Greeting " << client);
pipes_.send(buf);
} else if (cmd == "bye") {
// If clients_ == 0 maybe we should reset the pipes
if (i < numclients_) {
--numclients_;
clients_[i].erase();
- LYXERR(Debug::LYXSERVER)
- << "Server: Client "
- << client << " said goodbye"
- << endl;
+ LYXERR(Debug::LYXSERVER, "Server: Client "
+ << client << " said goodbye");
} else {
- LYXERR(Debug::LYXSERVER)
- << "Server: ignoring bye messge from unregistered client"
- << client << endl;
+ LYXERR(Debug::LYXSERVER,
+ "Server: ignoring bye messge from unregistered client" << client);
}
} else {
- lyxerr <<"Server: Undefined server command "
- << cmd << '.' << endl;
+ LYXERR0("Server: Undefined server command " << cmd << '.');
}
return;
}
}
-// Send a notify messge to a client, called by WorkAreaKeyPress
+// Send a notify message to a client, called by WorkAreaKeyPress
void Server::notifyClient(string const & s)
{
pipes_.send("NOTIFY:" + s + "\n");