1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1990-2011 AT&T Intellectual Property          *
5*                      and is licensed under the                       *
6*                  Common Public License, Version 1.0                  *
7*                    by AT&T Intellectual Property                     *
8*                                                                      *
9*                A copy of the License is available at                 *
10*            http://www.opensource.org/licenses/cpl1.0.txt             *
11*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12*                                                                      *
13*              Information and Software Systems Research               *
14*                            AT&T Research                             *
15*                           Florham Park NJ                            *
16*                                                                      *
17*                 Glenn Fowler <gsf@research.att.com>                  *
18*                                                                      *
19***********************************************************************/
20#pragma prototyped
21/*
22 * Glenn Fowler
23 * AT&T Research
24 *
25 * coshell library private definitions
26 */
27
28#ifndef _COLIB_H
29#define _COLIB_H
30
31#include <ast.h>
32#include <dt.h>
33#include <vmalloc.h>
34
35#define _CO_JOB_PRIVATE_		/* Cojob_t private additions	*/ \
36	Cojob_t*	next;		/* next in list			*/ \
37	Coservice_t*	service;	/* service 			*/ \
38	int		pid;		/* pid				*/ \
39	char*		out;		/* serialized stdout file	*/ \
40	char*		err;		/* serialized stderr file	*/ \
41					/* end of private additions	*/
42
43#define _CO_SHELL_PRIVATE_		/* Coshell_t private additions	*/ \
44	Vmalloc_t*	vm;		/* Coshell_t vm			*/ \
45	Coshell_t*	next;		/* next in list			*/ \
46	Cojob_t*	jobs;		/* job list			*/ \
47	Coservice_t*	service;	/* service 			*/ \
48	Dt_t*		export;		/* coexport() dictionary	*/ \
49	Dtdisc_t*	exdisc;		/* coexport() discipline	*/ \
50	struct Coinit_s			/* initialization script state	*/ \
51	{								   \
52	char*		script;		/* initialization script	*/ \
53	dev_t		pwd_dev;	/* previous pwd dev		*/ \
54	ino_t		pwd_ino;	/* previous pwd inode number	*/ \
55	int		mask;		/* previous umask		*/ \
56	int		sync;		/* sync script			*/ \
57	}		init;						   \
58	int		cmdfd;		/* command pipe fd		*/ \
59	int		gsmfd;		/* msgfp child write side	*/ \
60	int		mask;		/* CO_* flags to clear		*/ \
61	int		mode;		/* connection modes		*/ \
62	int		svc_outstanding;/* outstanding service intercepts */ \
63	int		svc_running;	/* running service intercepts	*/ \
64	int		pid;		/* pid				*/ \
65	int		index;		/* coshell index		*/ \
66	int		slots;		/* number of job slots		*/ \
67					/* end of private additions	*/
68
69typedef struct Coexport_s
70{
71	Dtlink_t	link;
72	char*		value;
73	char		name[1];
74} Coexport_t;
75
76struct Coservice_s;
77typedef struct Coservice_s Coservice_t;
78
79struct Coservice_s			/* service info			*/
80{
81	Coservice_t*	next;		/* next in list			*/
82	char*		name;		/* instance name		*/
83	char*		path;		/* coexec() command path	*/
84	char*		db;		/* state/db path		*/
85	int		fd;		/* command pipe			*/
86	int		pid;		/* pid				*/
87	char*		argv[16];	/* coexec() command argv[]	*/
88};
89
90#include <coshell.h>
91#include <error.h>
92#include <sig.h>
93#include <wait.h>
94
95#define state		_coshell_info_	/* hide external symbol		*/
96
97#define CO_MODE_ACK		(1<<0)	/* wait for coexec() ack	*/
98#define CO_MODE_INDIRECT	(1<<1)	/* indirect CO_SERVER		*/
99#define CO_MODE_SEPARATE	(1<<2)	/* 1 shell+wait per action	*/
100
101#define CO_INIT		(CO_USER>>1)	/* initial command		*/
102
103#define CO_PID_FREE	(-3)		/* free job slot		*/
104#define CO_PID_WARPED	(-2)		/* exit before start message	*/
105#define CO_PID_ZOMBIE	(-1)		/* ready for wait		*/
106
107#define CO_BUFSIZ	(PATH_MAX/2)	/* temporary buffer size	*/
108#define CO_MAXEVAL	(PATH_MAX*8)	/* max eval'd action size	*/
109
110typedef struct Costate_s		/* global coshell state		*/
111{
112	const char*	lib;		/* library id			*/
113	Coshell_t*	coshells;	/* list of all coshells		*/
114	Coshell_t*	current;	/* current coshell		*/
115	Coshell_t*	generic;	/* generic coshell for coinit()	*/
116	char*		pwd;		/* pwd				*/
117	char*		sh;		/* sh from first coopen()	*/
118	char*		type;		/* CO_ENV_TYPE value		*/
119	int		init;		/* 0 if first coopen()		*/
120	int		index;		/* last coshell index		*/
121} Costate_t;
122
123extern char 		coident[];	/* coshell ident script		*/
124extern char 		cobinit[];	/* bsh initialition script	*/
125extern char 		cokinit[];	/* ksh initialition script	*/
126extern char* 		co_export[];	/* default export var list	*/
127
128extern Costate_t	state;		/* global coshell info		*/
129
130#ifndef errno
131extern int		errno;
132#endif
133
134extern char*		costash(Sfio_t*);
135extern char*		coinitialize(Coshell_t*, int);
136
137#endif
138