ZNC trunk
Loading...
Searching...
No Matches
ExecSock.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2024 ZNC, see the NOTICE file for details.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ZNC_EXECSOCK_H
18#define ZNC_EXECSOCK_H
19
20#include <znc/zncconfig.h>
21#include <znc/Socket.h>
22#include <signal.h>
23
25class CExecSock : public CZNCSock {
26 public:
27 CExecSock() : CZNCSock(0), m_iPid(-1) {}
28
29 int Execute(const CString& sExec) {
30 int iReadFD, iWriteFD;
31 m_iPid = popen2(iReadFD, iWriteFD, sExec);
32 if (m_iPid != -1) {
33 ConnectFD(iReadFD, iWriteFD, "0.0.0.0:0");
34 }
35 return (m_iPid);
36 }
37 void Kill(int iSignal) {
38 kill(m_iPid, iSignal);
39 Close();
40 }
41 virtual ~CExecSock() {
42 close2(m_iPid, GetRSock(), GetWSock());
43 SetRSock(-1);
44 SetWSock(-1);
45 }
46
47 int popen2(int& iReadFD, int& iWriteFD, const CString& sCommand);
48 void close2(int iPid, int iReadFD, int iWriteFD);
49
50 private:
51 int m_iPid;
52};
53
54#endif // !ZNC_EXECSOCK_H
Definition ExecSock.h:25
int Execute(const CString &sExec)
Definition ExecSock.h:29
int popen2(int &iReadFD, int &iWriteFD, const CString &sCommand)
void Kill(int iSignal)
Definition ExecSock.h:37
CExecSock()
Definition ExecSock.h:27
virtual ~CExecSock()
Definition ExecSock.h:41
void close2(int iPid, int iReadFD, int iWriteFD)
String class that is used inside ZNC.
Definition ZNCString.h:68
Definition Socket.h:27
cs_sock_t & GetWSock()
void SetWSock(cs_sock_t iSock)
void SetRSock(cs_sock_t iSock)
void Close(ECloseType eCloseType=CLT_NOW)
just mark us as closed, the parent can pick it up
cs_sock_t & GetRSock()
returns a reference to the sock
bool ConnectFD(int iReadFD, int iWriteFD, const CS_STRING &sName, bool bIsSSL=false, ETConn eDirection=INBOUND)
Tie this guy to an existing real file descriptor.