mirror of
				https://github.com/lxsang/ant-http
				synced 2025-10-31 10:25:55 +01:00 
			
		
		
		
	make file now can handle plugins building
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| # Prerequisites | ||||
| plugins | ||||
| build | ||||
| *._* | ||||
| *.d | ||||
|   | ||||
							
								
								
									
										66
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,47 +1,4 @@ | ||||
| USE_DB=TRUE | ||||
| USE_SSL = TRUE | ||||
| CC=gcc | ||||
| EXT=dylib | ||||
| BUILDIRD=build | ||||
| UNAME_S := $(shell uname -s) | ||||
| ifeq ($(UNAME_S),Linux) | ||||
|     BUILDIRD=/opt/www | ||||
| 	PF_FLAG=-D_GNU_SOURCE -DLINUX | ||||
| endif | ||||
| ifeq ($(UNAME_S),Darwin) | ||||
| 	BUILDIRD=/Users/mrsang/Documents/build/www | ||||
| 	PF_FLAG= -DMACOS | ||||
| 	SSL_HEADER_PATH = -I/usr/local/opt/openssl/include | ||||
| 	SSL_LIB_PATH = -L/usr/local/opt/openssl/lib | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_DB),TRUE) | ||||
| 	DB_OBJ=libs/dbhelper.o | ||||
| 	DB_LIB=-lsqlite3 | ||||
| 	DB_FLAG=-D USE_DB | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_DB),FALSE) | ||||
| 	DB_OBJ= | ||||
| 	DB_LIB= | ||||
| 	DB_FLAG= | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_SSL),TRUE) | ||||
| 	SSL_LIB= $(SSL_LIB_PATH) -lssl -lcrypto  | ||||
| 	SSL_FLAG=-D USE_OPENSSL | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_SSL),FALSE) | ||||
| 	SSL_LIB= | ||||
| 	SSL_FLAG= | ||||
| 	SSL_HEADER_PATH = | ||||
| 	SSL_LIB_PATH =  | ||||
| endif | ||||
|  | ||||
|  | ||||
| CFLAGS= -W  -Wall -g -std=c99 -D DEBUG $(DB_FLAG) $(PF_FLAG) $(SSL_FLAG) $(SSL_HEADER_PATH) | ||||
|  | ||||
| include var.mk | ||||
| LIB_PATH=$(BUILDIRD)/plugins | ||||
| LIB_NAME=libantd | ||||
| LIB_FLAG= $(LIB_NAME).$(EXT) | ||||
| @@ -50,7 +7,6 @@ SERVERLIB= -ldl $(LIB_FLAG) $(DB_LIB) $(SSL_LIB)  -lpthread | ||||
| SERVER_O=plugin_manager.o \ | ||||
| 		http_server.o | ||||
| #-lsocket | ||||
| PLUGINS=	wterm.$(EXT) nodedaemon.$(EXT) | ||||
|  | ||||
| LIBOBJS = 	libs/ini.o \ | ||||
| 			libs/handle.o \ | ||||
| @@ -65,7 +21,7 @@ LIBOBJS = 	libs/ini.o \ | ||||
| PLUGINSDEP = libs/plugin.o | ||||
|  | ||||
|  | ||||
| main: httpd plugins  | ||||
| main:  initd httpd antd_plugins  | ||||
|  | ||||
| initd: | ||||
| 	-mkdir -p $(LIB_PATH) | ||||
| @@ -80,14 +36,14 @@ lib: $(LIBOBJS) | ||||
| %.o: %.c | ||||
| 	$(CC) -fPIC $(CFLAGS) -c $< -o $@ | ||||
| 	 | ||||
| plugins: $(PLUGINS) | ||||
| 	 | ||||
| %.$(EXT): $(PLUGINSDEP)  | ||||
| 	for file in $(wildcard libs/$(basename $@)/*.c) ; do\ | ||||
| 		$(CC) -fPIC $(CFLAGS)  -c  $$file -o $$file.o; \ | ||||
| antd_plugins: | ||||
| 	- echo "make plugin" | ||||
| 	-for file in plugins/* ; do\ | ||||
| 		echo $$file;\ | ||||
| 		if [ -d "$$file" ]; then \ | ||||
| 			make -C  "$$file"; \ | ||||
| 		fi \ | ||||
| 	done | ||||
| 	$(CC) $(CFLAGS) $(PLUGINLIBS) $(LIB_FLAG) -shared -o $(BUILDIRD)/plugins/$(basename $@).$(EXT) \ | ||||
| 		$(PLUGINSDEP)  libs/$(basename $@)/*.c.o | ||||
|  | ||||
|  | ||||
| clean: sclean pclean | ||||
| @@ -97,9 +53,9 @@ sclean: | ||||
| 	-rm *.$(EXT) | ||||
| pclean: | ||||
| 	-rm -rf $(BUILDIRD)/plugins/* libs/*.o | ||||
| 	-for file in libs/* ;do \ | ||||
| 	-for file in plugins/* ;do \ | ||||
| 		if [ -d "$$file" ]; then \ | ||||
| 			rm "$$file"/*.o; \ | ||||
| 			make -C  "$$file" clean; \ | ||||
| 		fi \ | ||||
| 	done | ||||
| .PRECIOUS: %.o | ||||
|   | ||||
| @@ -1,268 +0,0 @@ | ||||
| #include <stdlib.h> | ||||
| #include <fcntl.h> | ||||
| #include <errno.h> | ||||
| #include <unistd.h> | ||||
| #include <stdio.h> | ||||
| #include <termios.h> | ||||
| #include <sys/select.h> | ||||
| #include <sys/ioctl.h> | ||||
| #include <string.h> | ||||
| #include "../plugin.h" | ||||
|  | ||||
| void pexit() | ||||
| { | ||||
| 	 | ||||
| } | ||||
| void handle(void* cl, const char* m, const char* rqp, dictionary rq) | ||||
| { | ||||
| 	ws_msg_header_t* h = NULL; | ||||
| 	if(ws_enable(rq)) | ||||
| 	{ | ||||
| 		 | ||||
| 		int fdm, fds; | ||||
| 		int rc, status; | ||||
| 		char buff[1024]; | ||||
| 		pid_t pid; | ||||
| 		// Check arguments | ||||
| 		fdm = posix_openpt(O_RDWR); | ||||
| 		if (fdm < 0) | ||||
| 		{ | ||||
| 			LOG("Error %d on posix_openpt()\n", errno); | ||||
| 			ws_close(cl, 1011); | ||||
| 			return ; | ||||
| 		} | ||||
|  | ||||
| 		rc = grantpt(fdm); | ||||
| 		if (rc != 0) | ||||
| 		{ | ||||
| 			LOG("Error %d on grantpt()\n", errno); | ||||
| 			ws_close(cl, 1011); | ||||
| 			return ; | ||||
| 		} | ||||
|  | ||||
| 		rc = unlockpt(fdm); | ||||
| 		if (rc != 0) | ||||
| 		{ | ||||
| 			LOG( "Error %d on unlockpt()\n", errno); | ||||
| 			ws_close(cl, 1011); | ||||
| 			return ; | ||||
| 		} | ||||
|  | ||||
| 		// Open the slave side ot the PTY | ||||
| 		fds = open(ptsname(fdm), O_RDWR); | ||||
|  | ||||
| 		// Create the child process | ||||
| 		pid = fork(); | ||||
| 		if (pid) | ||||
| 		{ | ||||
| 			fd_set fd_in; | ||||
|  | ||||
| 			// FATHER | ||||
|  | ||||
| 			// Close the slave side of the PTY | ||||
| 			close(fds); | ||||
| 			int max_fdm; | ||||
| 			int cl_fd = ((antd_client_t*)cl)->sock; | ||||
| 			while (1) | ||||
| 			{	 | ||||
| 				FD_ZERO(&fd_in); | ||||
| 				//FD_SET(0, &fd_in); | ||||
| 				FD_SET(fdm, &fd_in); | ||||
| 				FD_SET(cl_fd,&fd_in); | ||||
| 				max_fdm = fdm>cl_fd?fdm:cl_fd; | ||||
| 				rc = select(max_fdm + 1, &fd_in, NULL, NULL, NULL); | ||||
| 				switch(rc) | ||||
| 				{ | ||||
| 					case -1 :  | ||||
| 						LOG("Error %d on select()\n", errno); | ||||
| 						ws_close(cl, 1011); | ||||
| 						goto wait_for_child; | ||||
|  | ||||
| 					default : | ||||
| 					{ | ||||
| 	   					// If data is on websocket side | ||||
| 						if (FD_ISSET(cl_fd, &fd_in)) | ||||
| 						{ | ||||
| 			      			h = ws_read_header(cl); | ||||
| 			      			if(h) | ||||
| 			      			{ | ||||
| 								if(h->mask == 0) | ||||
| 								{ | ||||
| 			      					LOG("%s\n","Data is not mask"); | ||||
| 			   						write(fdm, "exit\n", 5); | ||||
| 									free(h); | ||||
| 			      					goto wait_for_child;; | ||||
| 								} | ||||
| 			      				if(h->opcode == WS_CLOSE) | ||||
| 			      				{ | ||||
| 			      					LOG("%s\n","Websocket: connection closed"); | ||||
| 			   						write(fdm, "exit\n", 5); | ||||
| 									free(h); | ||||
| 			      					goto wait_for_child;; | ||||
| 			      				} | ||||
| 			      				else if(h->opcode == WS_TEXT) | ||||
| 			      				{ | ||||
| 			      					int l; | ||||
| 									char * tok = NULL; | ||||
| 									char* tok1 = NULL; | ||||
| 									char* orgs = NULL; | ||||
| 			      					while((l = ws_read_data(cl,h,sizeof(buff),buff)) > 0) | ||||
| 			      					{ | ||||
| 										char c = buff[0]; | ||||
| 										switch(c) | ||||
| 										{ | ||||
| 											case 'i': // input from user | ||||
| 											write(fdm, buff+1, l-1); | ||||
| 											break; | ||||
| 											 | ||||
| 											case 's': // terminal resize event | ||||
| 											buff[l] = '\0'; | ||||
| 											tok = strdup(buff+1); | ||||
| 											orgs = tok; | ||||
| 											tok1 = strsep(&tok,":"); | ||||
| 											if(tok != NULL && tok1 != NULL) | ||||
| 											{ | ||||
| 												int cols = atoi(tok1); | ||||
| 												int rows = atoi(tok); | ||||
| 												//free(tok); | ||||
| 												struct winsize win = { 0, 0, 0, 0 }; | ||||
| 												if (ioctl(fdm, TIOCGWINSZ, &win) != 0) { | ||||
| 													if (errno != EINVAL) { | ||||
| 															printf("Exit now \n"); | ||||
| 															break; | ||||
| 													} | ||||
| 													memset(&win, 0, sizeof(win)); | ||||
| 												} | ||||
| 												//printf("Setting winsize\n"); | ||||
| 												if (rows >= 0) | ||||
| 													win.ws_row = rows; | ||||
| 												if (cols >= 0) | ||||
| 													win.ws_col = cols; | ||||
|  | ||||
| 												if (ioctl(fdm, TIOCSWINSZ, (char *) &win) != 0) | ||||
| 													printf("Cannot set winsize\n"); | ||||
| 												 | ||||
| 												free(orgs); | ||||
| 											} | ||||
| 											 | ||||
| 											break; | ||||
| 											 | ||||
| 											default: | ||||
| 											break; | ||||
| 										} | ||||
| 										//ws_t(cl,buff); | ||||
| 			      					} | ||||
| 									/*if(l == -1) | ||||
| 									{ | ||||
| 										printf("EXIT FROM CLIENT \n"); | ||||
| 				   						write(fdm, "exit\n", 5); | ||||
| 				      					return; | ||||
| 									}*/ | ||||
| 			      				} | ||||
|  | ||||
| 			      				free(h); | ||||
| 			      			}  | ||||
| 							else | ||||
| 							{ | ||||
| 								write(fdm, "exit\n", 5); | ||||
| 								ws_close(cl,1000); | ||||
| 							}  | ||||
| 						} | ||||
| 						// If data on master side of PTY | ||||
| 						if (FD_ISSET(fdm, &fd_in)) | ||||
| 						{ | ||||
| 							//rc = read(fdm, buff, sizeof(buff)); | ||||
| 							if ( (rc = read(fdm, buff,sizeof(buff)-1)) > 0) | ||||
| 							{ | ||||
| 								// Send data to websocket | ||||
| 								buff[rc] = '\0'; | ||||
| 								ws_t(cl,buff); | ||||
| 							} else | ||||
| 							{ | ||||
| 								if (rc < 0) | ||||
| 								{ | ||||
| 									LOG("Error %d on read standard input. Exit now\n", errno); | ||||
| 									write(fdm, "exit\n", 5); | ||||
| 									ws_close(cl,1011); | ||||
| 									goto wait_for_child; | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 						//printf("DONE\n"); | ||||
| 					} | ||||
| 				} // End switch | ||||
| 			} // End while | ||||
| 			wait_for_child: | ||||
| 				waitpid(pid, &status, 0); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			struct termios slave_orig_term_settings; // Saved terminal settings | ||||
| 			struct termios new_term_settings; // Current terminal settings | ||||
|  | ||||
| 			// CHILD | ||||
| 		 | ||||
| 			// Close the master side of the PTY | ||||
| 			close(fdm); | ||||
|  | ||||
| 			// Save the defaults parameters of the slave side of the PTY | ||||
| 			//rc = tcgetattr(fds, &slave_orig_term_settings); | ||||
|  | ||||
| 			// Set RAW mode on slave side of PTY | ||||
| 			//new_term_settings = slave_orig_term_settings; | ||||
| 			//cfmakeraw (&new_term_settings); | ||||
| 			//tcsetattr (fds, TCSANOW, &new_term_settings); | ||||
|  | ||||
| 			// The slave side of the PTY becomes the standard input and outputs of the child process | ||||
| 			// we use cook mode here | ||||
| 			close(0); // Close standard input (current terminal) | ||||
| 			close(1); // Close standard output (current terminal) | ||||
| 			close(2); // Close standard error (current terminal) | ||||
|  | ||||
| 			dup(fds); // PTY becomes standard input (0) | ||||
| 			dup(fds); // PTY becomes standard output (1) | ||||
| 			dup(fds); // PTY becomes standard error (2) | ||||
|  | ||||
| 			// Now the original file descriptor is useless | ||||
| 			close(fds); | ||||
|  | ||||
| 			// Make the current process a new session leader | ||||
| 			setsid(); | ||||
|  | ||||
| 			// As the child is a session leader, set the controlling terminal to be the slave side of the PTY | ||||
| 			// (Mandatory for programs like the shell to make them manage correctly their outputs) | ||||
| 			ioctl(0, TIOCSCTTY, 1); | ||||
| 		 | ||||
| 			//system("/bin/bash"); | ||||
| 			system("TERM=linux sudo login"); | ||||
| 			// if Error... | ||||
| 			ws_close(cl,1000); | ||||
| 			//LOG("%s\n","Terminal exit"); | ||||
| 			_exit(1); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	LOG("%s\n","All processes exit"); | ||||
| } | ||||
|  | ||||
| /* | ||||
| static void set_window_size(int rows, int cols) | ||||
| { | ||||
| struct winsize win = { 0, 0, 0, 0 }; | ||||
| if (ioctl(STDIN_FILENO, TIOCGWINSZ, &win)) { | ||||
| 	if (errno != EINVAL) { | ||||
| 			goto bail; | ||||
| 		} | ||||
| 		memset(&win, 0, sizeof(win)); | ||||
| 	} | ||||
|  | ||||
| 	if (rows >= 0) | ||||
| 		win.ws_row = rows; | ||||
| 	if (cols >= 0) | ||||
| 		win.ws_col = cols; | ||||
|  | ||||
| 	if (ioctl(STDIN_FILENO, TIOCSWINSZ, (char *) &win)) | ||||
| bail: | ||||
| 		perror_on_device("%s"); | ||||
| } | ||||
| */ | ||||
							
								
								
									
										52
									
								
								var.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								var.mk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| USE_DB=TRUE | ||||
| USE_SSL = TRUE | ||||
| CC=gcc | ||||
| EXT=dylib | ||||
| BUILDIRD=build | ||||
| UNAME_S := $(shell uname -s) | ||||
| ifeq ($(UNAME_S),Linux) | ||||
|     BUILDIRD=/opt/www | ||||
| 	PF_FLAG=-D_GNU_SOURCE -DLINUX | ||||
| 	PPF_FLAG=-D_GNU_SOURCE -DLINUX  -Wl,--no-as-needed | ||||
| endif | ||||
| ifeq ($(UNAME_S),Darwin) | ||||
| 	BUILDIRD=/Users/mrsang/Documents/build/www | ||||
| 	PF_FLAG= -DMACOS | ||||
| 	PPF_FLAG=-D_GNU_SOURCE -DMACOS -Wl,-undefined,dynamic_lookup | ||||
| 	SSL_HEADER_PATH = -I/usr/local/opt/openssl/include | ||||
| 	SSL_LIB_PATH = -L/usr/local/opt/openssl/lib | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_DB),TRUE) | ||||
| 	DB_OBJ=libs/dbhelper.o | ||||
| 	DB_LIB=-lsqlite3 | ||||
| 	DB_FLAG=-D USE_DB | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_DB),FALSE) | ||||
| 	DB_OBJ= | ||||
| 	DB_LIB= | ||||
| 	DB_FLAG= | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_SSL),TRUE) | ||||
| 	SSL_LIB= $(SSL_LIB_PATH) -lssl -lcrypto  | ||||
| 	SSL_FLAG=-D USE_OPENSSL | ||||
| endif | ||||
|  | ||||
| ifeq ($(USE_SSL),FALSE) | ||||
| 	SSL_LIB= | ||||
| 	SSL_FLAG= | ||||
| 	SSL_HEADER_PATH = | ||||
| 	SSL_LIB_PATH =  | ||||
| endif | ||||
|  | ||||
|  | ||||
| CFLAGS= -W  -Wall -g -std=c99 -D DEBUG $(DB_FLAG) $(PF_FLAG) $(SSL_FLAG) $(SSL_HEADER_PATH) | ||||
|  | ||||
| # xplugin variables | ||||
| PLUGINS_BASE=../../libs | ||||
| PBUILDIRD=$(BUILDIRD)/plugins | ||||
| LIB_CFLAGS= -W -Wall  -g -std=c99 -W $(PPF_FLAG) | ||||
| APP_DIR=$(BUILDIRD)/htdocs/ | ||||
| INCFLAG= -I$(PLUGINS_BASE) | ||||
		Reference in New Issue
	
	Block a user