Menu

[r275]: / trunk / php-java-bridge / init_cfg.c.in  Maximize  Restore  History

Download this file

120 lines (101 with data), 3.8 kB

/*-*- mode: C; tab-width:4 -*-*/

/* mkstemp */
#include <stdlib.h>

/* time */
#include <time.h>

/* assert */
#include <assert.h>

#include "protocol.h"
#include "php_java.h"

#ifndef EXTENSION_DIR
#error EXTENSION_DIR must point to the PHP extension directory
#endif

#ifndef CFG_CLASSPATH
#define CFG_CLASSPATH EXTENSION_DIR/**/"/JavaBridge.jar"
#endif
#ifndef CFG_LD_LIBRARY_PATH
#define CFG_LD_LIBRARY_PATH EXTENSION_DIR
#endif

#ifndef CFG_JAVA
#if @COND_GCJ@ == 1
#define CFG_JAVA EXTENSION_DIR/**/EXT_NAME()
#else
#define CFG_JAVA "@PHP_JAVA_BIN@"
#endif
#endif

#ifndef CFG_JAVA_HOME
#if @COND_GCJ@ == 1
#define CFG_JAVA_HOME EXTENSION_DIR
#else
#define CFG_JAVA_HOME "@PHP_JAVA@"
#endif
#endif

#ifndef BRIDGE_VERSION
#define BRIDGE_VERSION "@BRIDGE_VERSION@"
#endif

const char * const EXT_GLOBAL (bridge_version) = BRIDGE_VERSION;

#ifndef CFG_JAVA_SOCKET_INET
#ifdef HAVE_ABSTRACT_NAMESPACE
static void init_socket() {
  static const char * const bridge="@java-bridge-";
  size_t len = strlen(bridge)+ sizeof(pid_t)*2; //assuming byte=8bit

  char *sockname=malloc(len+1);
  assert(sockname); if(!sockname) exit(6);

  snprintf(sockname, len+1, "%s%lx", bridge,(unsigned long)getpid());
  EXT_GLOBAL(cfg)->sockname=sockname;
}
#else 
static void init_socket() {
	int n;
	char*s=SOCKNAME;
	char *sockname=malloc(strlen(s)+1);
	assert(sockname); if(!sockname) exit(6);
	strcpy(sockname, s);
	n = mkstemp(sockname);
	assert(n); if(!n) exit(6);
	EXT_GLOBAL(cfg)->sockname=sockname;
}
#endif
#else 
static void init_socket() {
  EXT_GLOBAL(cfg)->sockname = strdup(DEFAULT_PORT);
}
#endif
void EXT_GLOBAL (init_cfg) () {
  if(!(EXT_GLOBAL (ini_updated)&U_SOCKNAME)) {
	init_socket();
  }
  if(!(EXT_GLOBAL (ini_updated) &U_SERVLET)) EXT_GLOBAL(cfg)->servlet=strdup(DEFAULT_SERVLET);
  if(!(EXT_GLOBAL (ini_updated) &U_HOSTS)) EXT_GLOBAL(cfg)->hosts=strdup("");
  if(!(EXT_GLOBAL (ini_updated) &U_CLASSPATH)) EXT_GLOBAL(cfg)->classpath=strdup(CFG_CLASSPATH);
  if(!(EXT_GLOBAL (ini_updated) &U_LIBRARY_PATH)) EXT_GLOBAL(cfg)->ld_library_path=strdup(CFG_LD_LIBRARY_PATH);
  if(!(EXT_GLOBAL (ini_updated) &U_JAVA)) EXT_GLOBAL(cfg)->vm=strdup(CFG_JAVA);
  if(!(EXT_GLOBAL (ini_updated) &U_JAVA_HOME)) EXT_GLOBAL(cfg)->vm_home=strdup(CFG_JAVA_HOME);
  if(!(EXT_GLOBAL (ini_updated) &U_LOGLEVEL)) {
	EXT_GLOBAL(cfg)->logLevel=strdup(DEFAULT_LEVEL);
	EXT_GLOBAL(cfg)->logLevel_val=atoi(DEFAULT_LEVEL);
  }
  if(!(EXT_GLOBAL (ini_updated) &U_LOGFILE)) EXT_GLOBAL(cfg)->logFile=strdup(LOGFILE);
  EXT_GLOBAL(cfg)->can_fork=
	((EXT_GLOBAL (ini_updated) &U_SOCKNAME)==0)&&
	((EXT_GLOBAL (ini_updated) &U_HOSTS)==0);
}

void EXT_GLOBAL (destroy_cfg) (int EXT_GLOBAL (ini_updated) ) {
  if(!(EXT_GLOBAL (ini_updated) &U_SERVLET)) free(EXT_GLOBAL(cfg)->servlet);
  if(!(EXT_GLOBAL (ini_updated) &U_HOSTS)) free(EXT_GLOBAL(cfg)->hosts);
  if(!(EXT_GLOBAL (ini_updated) &U_SOCKNAME)) free(EXT_GLOBAL(cfg)->sockname);
  if(!(EXT_GLOBAL (ini_updated) &U_CLASSPATH)) free(EXT_GLOBAL(cfg)->classpath);
  if(!(EXT_GLOBAL (ini_updated) &U_LIBRARY_PATH)) free(EXT_GLOBAL(cfg)->ld_library_path);
  if(!(EXT_GLOBAL (ini_updated) &U_JAVA)) free(EXT_GLOBAL(cfg)->vm);
  if(!(EXT_GLOBAL (ini_updated) &U_JAVA_HOME)) free(EXT_GLOBAL(cfg)->vm_home);
  if(!(EXT_GLOBAL (ini_updated) &U_LOGLEVEL)) free(EXT_GLOBAL(cfg)->logLevel);
  if(!(EXT_GLOBAL (ini_updated) &U_LOGFILE)) free(EXT_GLOBAL(cfg)->logFile);
}

static short is_servlet() {
  return ((EXT_GLOBAL (ini_last_updated)&U_SERVLET)!=0) && EXT_GLOBAL(cfg)->servlet && strlen(EXT_GLOBAL(cfg)->servlet) && strncasecmp("off", EXT_GLOBAL(cfg)->servlet, 3);
}

char *EXT_GLOBAL(get_servlet_context)() {
  if(!is_servlet()) return 0;

  if(!strncasecmp("on", EXT_GLOBAL(cfg)->servlet, 2)) return DEFAULT_SERVLET;
  return EXT_GLOBAL(cfg)->servlet;
}