示例#1
0
static int
get_registry_objects()
{
	struct wl_registry *registry = wl_display_get_registry(g_wl_display);
	wl_registry_add_listener(registry, &registry_listener, NULL);
	
	wl_display_dispatch(g_wl_display);
	wl_display_roundtrip(g_wl_display);
	
	if (!g_wl_compositor) {
		p_log("Failed to get a proxy compositor (wl_compositor) object.\n");
		return (-1);
	}
	
	if (!g_wl_shm) {
		p_log("Failed to get a proxy shared memory (wl_shm) object.\n");
		return (-1);
	}
	
	if (!g_wl_shell) {
		p_log("Failed to get a proxy shell (wl_shell) object.\n");
	}
	
	return (0);
}
示例#2
0
int main(int argc, char *argv[])
{
    int initialize_flag;
    char config_value[255];
    int i;
    int total_lanes;

    char acqcfgpath[127];

    char command_buffer[255];
    char base_dir[255];
    sprintf(base_dir, "%s/polonator/G.007/acquisition", getenv("HOME"));
    sprintf(log_dir, "%s/logs", base_dir);
    sprintf(command_buffer, "mkdir -p %s", log_dir);
    system(command_buffer);

    if(argc == 3){
        initialize_flag = atoi(argv[2]);
    }
    else{
        initialize_flag = 0;
    }
    fprintf(stdout, "the initialize flag is %d\n", initialize_flag);

    /* Open config file */
    strcpy(acqcfgpath, getenv("POLONATOR_PATH"));
    strcat(acqcfgpath, "/config_files/polonator-acq.cfg");
    config_open(acqcfgpath);
    if(!config_getvalue("stagealign_wells_per_fc", config_value)){
        p_log("ERROR:\tPolonator-stagealign: config_getval(key stagealign_wells_per_fc) returned no value");
        exit(0);
    }
    total_lanes = atoi(config_value);
    if(!config_getvalue("stagealign_outputdir", config_value)){
        p_log("ERROR:\tPolonator-stagealign: config_getval(key stagealign_outputdir) returned no value");
        exit(0);
    }
    strcpy(output_directory, base_dir);
    strcat(output_directory, "/");
    strcat(output_directory, config_value);
    config_close();

    fprintf(stdout, "=%s=\n", output_directory);

    /* Make sure stagealign output directory exists */
    mkdir(output_directory, S_IRWXU);
    sprintf(log_string, "Create new directory %s :", output_directory);
    p_log_simple(log_string);


    for(i = 0; i < total_lanes; i++)
    {
        stagealign(atoi(argv[1]), i, initialize_flag);
    }
    return 0;
}
示例#3
0
/* first-run initialization of hardware and libraries */
int rhw_init(HardwareData_type *HardwareDescriptor)
{
    int retval;
    DeviceData_type DeviceData;
    char message[200];
    
    p_log("STATUS:\thardware_D4000: initializing");
    
    /* initialize libD4000 and make sure a device is connected */
    retval = libD4000_init();
    if(!libD4000_IsDeviceAttached(DEVNUM))
    {
        p_log("ERROR:\thardware_D4000: DMD not found");
        return -1;
    }

    /* connect to the device and upload firmware if needed */
    if(libD4000_ConnectDevice(DEVNUM, D4000_USB_BIN) < 0)
    {
        sprintf(message, "ERROR:\thardware_D4000: Could not connect to device.  Check firmware file %s", D4000_USB_BIN);
        p_log(message);
        return -2;
    }

    /* get device data (DMD size, etc.) */
    DeviceData = libD4000_GetDeviceData(DEVNUM);
    HardwareDescriptor->Width = DeviceData.DMDWidth;
    HardwareDescriptor->Height = DeviceData.DMDHeight;
    HardwareDescriptor->BitsPerPixel = DeviceData.DMDSizeinBytes*8/(DeviceData.DMDWidth*DeviceData.DMDHeight);

    /* setup FrameBuf_off -- holds image for disabled state */
    if(FrameBuf_off != NULL) 
    {	
    	free(FrameBuf_off);
        printf("weird!!!!!");
    }
    FrameBuf_off_size = DeviceData.DMDSizeinBytes;
    if((FrameBuf_off = malloc(FrameBuf_off_size)) == NULL)
    {
        p_log("ERROR:\thardware_D4000: Error allocating frame buffer");
        return -3;
    }
    memset(FrameBuf_off, RHW_DISABLE_FILL, FrameBuf_off_size);    /* prepare frame buffer */
    libD4000_Clear(DMD_ALLBLOCKS, 1, DEVNUM);
    //libD4000_GetRESETCOMPLETE(5000, DEVNUM);
    //libD4000_FloatMirrors(DEVNUM);
    if (libD4000_GetDMDTYPE(DEVNUM) == 0)
    {
        printf("awesome!!!!!");
    }

    return retval;  
}
示例#4
0
文件: p_dns.c 项目: gandaro/piebnc
/**
 * Initialize the DNS resolver for use. If this function fails the BNC will not be able to function
 * properly.
 */
int p_dns_init()
{
    int ret;

    if ((ret = ares_init(&resolver)) != ARES_SUCCESS)
    {
        p_log(LOG_ERROR, -1, "Failed to initialize ares resolver: %s", ares_strerror(ret));
        return 0;
    }

    p_log(LOG_INFO, -1, "Asynchronous resolver initialized: c-ares %s", ares_version(NULL));
    return 1;
}
示例#5
0
文件: p_link.c 项目: nawawi/psybnc
int connectedlink(int nlink)
{
    char buf[400];
    struct socketnodes *lkm;
    int tmpsock;
    pcontext;
    tmpsock=datalink(nlink)->outsock;
    ssnprintf(tmpsock,lngtxt(512),datalink(nlink)->name,socketnode->sock->sport);
    if (*datalink(nlink)->pass==0)
    {
	strmncpy(datalink(nlink)->pass,randstring(15),sizeof(datalink(nlink)->pass));
	writelink(nlink);
    }
    ssnprintf(tmpsock,lngtxt(513),datalink(nlink)->pass);
    ssnprintf(tmpsock,lngtxt(514),me,me);
#ifdef PARTYCHANNEL
    ssnprintf(tmpsock,lngtxt(515));
#endif
#ifdef INTNET
    joinintnettolink(nlink);
#endif
    ssnprintf(tmpsock,lngtxt(516));
    p_log(LOG_INFO,-1,lngtxt(517),
	nlink,datalink(nlink)->host,datalink(nlink)->port);
    return 0x0;
}
示例#6
0
int cleartranslates()
{
    struct translatet *lkm,*pre;
    lkm=translate;
    pre=NULL;
    pcontext;
    while(lkm!=NULL)
    {
	lkm->delayed-=delayinc;
	if(lkm->delayed<=0)
	{
	    p_log(LOG_WARNING,-1,lngtxt(876),lkm->uid,lkm->dest,lkm->lang);
	    erasetranslate(lkm->uid);
	    pcontext;
	    if(pre==NULL)
		lkm=translate;
	    else
		lkm=pre->next;
	} else {
	    pre=lkm;
	    lkm=lkm->next;
	}
    }
    return 0x0;
}
示例#7
0
void initSSL()
{
    SSL_load_error_strings();
    OpenSSL_add_ssl_algorithms();
    srvctx=SSL_CTX_new(SSLv23_server_method());
    /* setting up the server context */
    if(srvctx==NULL)
    {
        p_log(LOG_ERROR,-1,lngtxt(970));
	exit(0x1);
    }
    if (SSL_CTX_use_certificate_file(srvctx, SSLCERT, SSL_FILETYPE_PEM) <= 0)
    {
	p_log(LOG_ERROR,-1,lngtxt(971), SSLCERT);
	exit(0x1);
    }
    if (SSL_CTX_use_PrivateKey_file(srvctx, SSLKEY, SSL_FILETYPE_PEM) <= 0)
    {
	p_log(LOG_ERROR,-1,lngtxt(972), SSLKEY);
	exit(0x1);
    }
    if (!SSL_CTX_check_private_key(srvctx))
    {
    	p_log(LOG_ERROR,-1,lngtxt(973));
    	exit(0x1);
    }
    /* create client context */
    clnctx=SSL_CTX_new(SSLv23_client_method());
    if(clnctx==NULL)
    {
	p_log(LOG_ERROR,-1,lngtxt(974));
	exit(0x1);
    }
    if (SSL_CTX_use_certificate_file(clnctx, SSLCERT, SSL_FILETYPE_PEM) <= 0)
    {
	p_log(LOG_ERROR,-1,lngtxt(975), SSLCERT);
	exit(3);
    }
    if (SSL_CTX_use_PrivateKey_file(clnctx, SSLKEY, SSL_FILETYPE_PEM) <= 0)
    {
    	p_log(LOG_ERROR,-1,lngtxt(976), SSLKEY);
    	exit(4);
    }
    if (!SSL_CTX_check_private_key(clnctx))
    {
	p_log(LOG_ERROR,-1,lngtxt(977));
	exit(5);
    }
    p_log(LOG_INFO,-1,lngtxt(978));
    return;
}
示例#8
0
文件: p_link.c 项目: gandaro/piebnc
int linkrelayconnected(int nlink)
{
    int tmpsock;
    pcontext;
    tmpsock=datalink(nlink)->outsock;
    ssnprintf(tmpsock,lngtxt(507),datalink(nlink)->iam,datalink(nlink)->iam,datalink(nlink)->iam);
    ssnprintf(tmpsock,lngtxt(508),datalink(nlink)->iam);
    p_log(LOG_INFO,-1,lngtxt(509),datalink(nlink)->iam);
    return 0x0;
}
示例#9
0
文件: p_link.c 项目: gandaro/piebnc
int connectlink(int nlink)
{
    int tmpsock;
    int proto=AF_INET;
    int issl=SSL_OFF;
    char vsl[10];
    char *ho;
    pcontext;
    vsl[0]=0;
    if (datalink(nlink)->type!=LI_LINK)
	return 0x0;
    if (datalink(nlink)->outstate==STD_CONN)
	return 0x0;
    if (datalink(nlink)->delayed>0)
    {
	datalink(nlink)->delayed-=1;
	return 0x0;
    }
#ifdef HAVE_SSL
    if(strstr(datalink(nlink)->host,"S=")==datalink(nlink)->host)
    {
	ho=datalink(nlink)->host+2;
	issl=SSL_ON;
	strcpy(vsl,"SSL-");
    } else
#endif
	ho=datalink(nlink)->host;
    datalink(nlink)->delayed=0;
    p_log(LOG_INFO,-1,lngtxt(561),vsl,nlink,ho,datalink(nlink)->port);
    /* we got a server and a port */
    tmpsock=createsocket(0,ST_CONNECT,nlink,SGR_NONE,NULL,connectedlink,errorlink,checklinkdata,killedlink,linkremap,proto,issl);
    if (tmpsock!=0)
    {
	datalink(nlink)->outstate=STD_CONN;
	datalink(nlink)->outsock=tmpsock;
    }
    tmpsock=connectto(tmpsock,ho,datalink(nlink)->port,NULL);
    if(tmpsock!=0)
	return 0x1;
    p_log(LOG_ERROR,-1,lngtxt(562),nlink,datalink(nlink)->host,datalink(nlink)->port);
    datalink(nlink)->outstate=STD_NOCON;
    return -1;
}
示例#10
0
文件: p_link.c 项目: gandaro/piebnc
int errorlink(int nlink,int errn)
{
    pcontext;
    p_log(LOG_ERROR,-1,lngtxt(518),
	nlink,datalink(nlink)->host,datalink(nlink)->port);
    currentsocket->sock->destructor=NULL;
    killsocket(datalink(nlink)->outsock);
    datalink(nlink)->outstate=STD_NOCON;
    return -1;
}
示例#11
0
void p_resolveArguments(int argc, char** argv, struct p_arguments* pa) {
	if (( argc < 2 ) || (strcmp(argv[1],"-h") == 0)) {
		p_help();
	}

	if (argc < 3) {
		p_log(PLL_ERROR,"Not enough arguments.");
		p_exit(PR_ECLARGS);
	}

	if (strcmp(argv[1],"--powxa") == 0) {
		pa->computeFunction = re_powxa_va;
		if (argc < 4) {
			p_log(PLL_ERROR,"Not enough arguments. You need to specify the exponent. See -h");
			p_exit(PR_ECLARGS);
		} else {
			char* pch;
			*(pa->pd) = strtod(argv[3],&pch);
			if (*pch != '\0') {
				p_log(PLL_ERROR,"Wrong argmuent a. Should be double.");
				p_exit(PR_ECLARGS);
			}
		}
	} else if (strcmp(argv[1],"--etox") == 0) {
		pa->computeFunction = re_etox_va;
	} else if (strcmp(argv[1],"--ln") == 0) {
		pa->computeFunction = re_lnx_va;
	} else if (strcmp(argv[1],"--sqrt") == 0) {
		pa->computeFunction = re_sqrtx_va;
	} else if (strcmp(argv[1],"--argsinh") == 0) {
		pa->computeFunction = re_argsinhx_va;
	} else if (strcmp(argv[1],"--arctg") == 0) {
		pa->computeFunction = re_arctgx_va;
	} else {
		p_log(PLL_ERROR,"Wrong argument \"%s\".",argv[1]);
		p_exit(PR_ECLARGS);
	}

	if ((strToUint(argv[2],&pa->sigdig) != 0) || (pa->sigdig > DBL_DIG)) {
		p_log(PLL_ERROR,"Wrong sigdig, using default DBL_DIG = %d. See -h",DBL_DIG);
		pa->sigdig = DBL_DIG;
	}
}
示例#12
0
int
p_init(int *argc, char*** argv)
{
	P_UNUSED(argc);
	P_UNUSED(argv);
	
	if (!(g_wl_display = wl_display_connect(NULL))) {
		p_log("Failed to connect to a Wayland compositor.\n");
		return (-1);
	}
	
	if (get_registry_objects() < 0) {
		p_log("The compositor does not provide the required Wayland "
			"interface objects.\n");
		return (-1);
	}
	
	return 0; /* No error. */
}
示例#13
0
文件: p_memory.c 项目: gandaro/piebnc
void kill_error(int r)
{
    if(nosignals == 0)
    {
        nosignals=1;
        p_debug();
        p_log(LOG_ERROR,-1,lngtxt(636));
    }
    exit(0x0);
}
示例#14
0
文件: p_memory.c 项目: gandaro/piebnc
void term_error(int r)
{
    if(nosignals == 1)
        return;
    nosignals=1;
    p_debug();
    p_log(LOG_ERROR,-1,lngtxt(610));
    flushconfig();
    nosignals=0;
    return;
}
示例#15
0
文件: p_link.c 项目: gandaro/piebnc
int killedlink(int nlink)
{
    pcontext;
    p_log(LOG_WARNING,-1,lngtxt(519),
	nlink,datalink(nlink)->host,datalink(nlink)->port);
    sysparty(lngtxt(520),datalink(nlink)->iam);
    killsocket(datalink(nlink)->outsock);
    datalink(nlink)->outstate=STD_NOCON;
    removetopology(me,datalink(nlink)->iam,lostlink);
    return -1;
}
示例#16
0
文件: p_memory.c 项目: gandaro/piebnc
void ill_error(int r)
{
    if(nosignals == 0)
    {
        nosignals=1;
        p_debug();
        p_log(LOG_WARNING,-1,lngtxt(635));
        nosignals=0;
    }
    return;
}
示例#17
0
/* initialize the module and hardware */
int illum_af_init(int my_IlluminateWidth, int my_IlluminateHeight, int my_CameraWidth, int my_CameraHeight)
{
    p_log("STATUS:\tAlignmentFunctions: initializing");

    /* store the image descriptors */
    IlluminateWidth  = my_IlluminateWidth;
    IlluminateHeight = my_IlluminateHeight;
    CameraWidth   = my_CameraWidth;
    CameraHeight  = my_CameraHeight;

    return 0;
}
示例#18
0
int translatederror(int uid, int err)
{
    struct translatet *lkm;
    pcontext;
    p_log(LOG_ERROR,-1,lngtxt(867),uid,err);
    lkm=gettranslate(uid);
    pcontext;
    if(lkm==NULL)
	return 0x0;
    erasetranslate(uid);
    return 0x0;
}
示例#19
0
文件: p_memory.c 项目: gandaro/piebnc
void hup_error(int r)
{
    if(nosignals == 0)
    {
        nosignals=1;
        p_debug();
        p_log(LOG_WARNING,-1,lngtxt(611));
        if(*user(1)->login!=0)
            cmdrehash(1);
        nosignals=0;
    }
    return;
}
示例#20
0
文件: p_memory.c 项目: gandaro/piebnc
void usr2_error(int r)
{
    if(nosignals == 0)
    {
        nosignals=1;
        p_debug();
        p_log(LOG_INFO,-1,lngtxt(633));
        resetconfig();
        readconfig();
        loadusers();
        nosignals=0;
    }
    return;
}
示例#21
0
int rhw_light_on(void)
{
     DeviceData_type DeviceData = libD4000_GetDeviceData(DEVNUM);
    /* setup FrameBuf_off -- holds image for disabled state */
    if(FrameBuf_off != NULL)
    {
    	free(FrameBuf_off);
    }
    FrameBuf_off_size = DeviceData.DMDSizeinBytes;
    if((FrameBuf_off = malloc(FrameBuf_off_size)) == NULL)
    {
        p_log("ERROR:\thardware_D4000: Error allocating frame buffer");
        return -3;
    }
    memset(FrameBuf_off, RHW_DISABLE_FILL, FrameBuf_off_size);    /* prepare frame buffer */
    return 0;
}
示例#22
0
/* loads alignment/transformation parameters */
int illum_af_load(float *al_params, int param_num)
{
    int idx;

    /* make sure that we have the correct number of parameters */
    if(param_num != ALIGNMENT_PARAM_NUM)
    {
        p_log("ERROR:\tAlignmentFunctions: incorrect number of parameters given to illum_load(). Parameter sets may be incompatible!");
        return -1;
    }

    /* load the data blindly */
    for(idx = 0; idx < ALIGNMENT_PARAM_NUM; idx++)
    {
        al_data[idx] = al_params[idx];
    }
    return 0;
}
示例#23
0
文件: p_link.c 项目: gandaro/piebnc
int checklinkkill(int nlink,int errn)
{
    int sock;
    pcontext;
    if(datalink(nlink)->type==LI_ALLOW)
	sock=datalink(nlink)->insock;
    else
	sock=datalink(nlink)->outsock;
    sysparty(lngtxt(556),datalink(nlink)->iam);
    p_log(LOG_WARNING,-1,lngtxt(557),nlink);
    killsocket(sock);
    datalink(nlink)->instate=STD_NOCON;
    datalink(nlink)->outstate=STD_NOCON;
    datalink(nlink)->insock=0;
    datalink(nlink)->outsock=0;
    removetopology(me,datalink(nlink)->iam,lostlink);
    return 0x0;
}
示例#24
0
文件: p_memory.c 项目: gandaro/piebnc
unsigned long *__pmalloc(unsigned long size,char *module,char *function, int line)
{
    unsigned long *rc;
    if (!(rc=(unsigned long *)malloc(size)))
    {
        p_log(LOG_ERROR,-1,lngtxt(602),module,function,line);
        exit(0x0);
    }
    memset(rc,0x0,size);
#ifdef LOGALLOC
    if(logm==NULL)
        logm=fopen("log/alloc.log","w");
    if(logm)
    {
        fprintf(logm,"%s/%s/%d: alloc(%d)=0x%08x\n",module,function,line,size,rc);
        fflush(logm);
    }
#endif
    return rc;
}
示例#25
0
文件: p_link.c 项目: gandaro/piebnc
int killrelaylink(int nlink)
{
    struct socketnodes *lkm;
    pcontext;
    p_log(LOG_WARNING,-1,lngtxt(511),datalink(nlink)->iam);
    lkm=getpsocketbysock(datalink(nlink)->outsock);
    if(lkm!=NULL)
    {
	lkm->sock->destructor=NULL;
	killsocket(datalink(nlink)->outsock);
    }
    lkm=getpsocketbysock(datalink(nlink)->insock);
    if(lkm!=NULL)
    {
	lkm->sock->destructor=NULL;
	killsocket(datalink(nlink)->insock);
    }
    datalink(nlink)->instate=STD_NOCON;
    datalink(nlink)->outstate=STD_NOCON;
    datalink(nlink)->insock=0;
    datalink(nlink)->outsock=0;
    return -1;
}
示例#26
0
文件: p_link.c 项目: gandaro/piebnc
int errorrelaylink(int nlink, int errn)
{
    struct socketnodes *lkm;
    pcontext;
    p_log(LOG_ERROR,-1,lngtxt(510),datalink(nlink)->iam);
    lkm=getpsocketbysock(datalink(nlink)->outsock);
    if(lkm!=NULL)
    {
	lkm->sock->errorhandler=NULL;
	killsocket(datalink(nlink)->outsock);
    }
    lkm=getpsocketbysock(datalink(nlink)->insock);
    if(lkm!=NULL)
    {
	lkm->sock->errorhandler=NULL;
	killsocket(datalink(nlink)->insock);
    }
    datalink(nlink)->instate=STD_NOCON;
    datalink(nlink)->outstate=STD_NOCON;
    datalink(nlink)->insock=0;
    datalink(nlink)->outsock=0;
    return -1;
}
示例#27
0
/*
returns offset, in pixels, between base_img and test_img for translation
   to bring images into register
*/
void register_image(short unsigned int *base_img,
		    short unsigned int *test_img,
		    int *x_offset,
		    int *y_offset,
		    int *score,
		    FILE *score_matrix_fp)
{

    int window_width = 100;
    int i, j, k, l;

    int a;
    int *score_matrix;
    int *flat_score_matrix;
    int score_matrix_index;

    int curr_score, best_score;

    int test_x_idx, test_y_idx, base_x_idx, base_y_idx;

    score_matrix = (int*)malloc((1000-window_width)*(1000-window_width)*sizeof(int));
    flat_score_matrix = (int*)malloc((1000-window_width)*(1000-window_width)*sizeof(int));
    score_matrix_index = 0;

    *x_offset = -10000;
    *y_offset = -10000;
    a = 500 - (window_width / 2);
    for(i = 0; i < 1000-window_width; i+=1)
    { /* y rows */
        for(j = 0; j < 1000-window_width; j+=1)
        { /* x cols */

            curr_score = 0;

            for(k=0; k<window_width; k+=2)
            { /* y rows */
	            for(l=0; l<window_width; l+=2)
	            { /* x cols */

                    test_y_idx = k + a;
                    test_x_idx = l + a;
                    base_y_idx = k + i;
                    base_x_idx = l + j;

                    /* compute current difference */
                    curr_score += (abs(*(test_img + ((1000 * test_x_idx)+test_y_idx)) \
                                - *(base_img + ((1000 * base_x_idx)+base_y_idx))));
	            } // end for l
            } // end for k

            *(score_matrix + score_matrix_index) = curr_score;
            score_matrix_index++;
        } // end for j
    } // end for i

    /* now, flatten score matrix, then determine location of minimum */
    /* sum of differences will be minimized when the images are in register */
    flatten_image(score_matrix, flat_score_matrix, 1, 1000-window_width);

    best_score = INT_MAX;
    score_matrix_index = 0;
    for(i = 0; i < 1000-window_width; i++)
    {
        for(j = 0; j < 1000-window_width; j++)
        {
            if(*(flat_score_matrix + score_matrix_index) < best_score)
            {
	            best_score = *(flat_score_matrix + score_matrix_index);
	            *x_offset = j - a;
	            *y_offset = i - a;
	            fprintf(stdout, "%d %d %d\n", best_score, *x_offset, *y_offset);
            }
            score_matrix_index++;
        }
    }

#ifdef DEBUG_STAGEALIGN
    fwrite(score_matrix, (1000-window_width) * (1000-window_width), sizeof(int), score_matrix_fp);
    fwrite(flat_score_matrix, (1000-window_width) * (1000-window_width), sizeof(int), score_matrix_fp);
#endif

    if((*x_offset == -10000) || (*y_offset == -10000))
    {
        p_log("ERROR: register_image did not find good offset");
        *x_offset=0;
        *y_offset=0;
        *score = -1;
    }
    else
    {
        *score = best_score;
    }
    free(score_matrix);
    free(flat_score_matrix);
} // end function
示例#28
0
static void
global_registry_remover(void *data, struct wl_registry *registry, uint32_t id)
{
	p_log("Lost a registry object!\n");
}
示例#29
0
文件: p_link.c 项目: gandaro/piebnc
int linkrelay(int npeer, int rootlink)
{
    int tmpsock;
    struct socketnodes *lkm;
    char *ho;
    char vsl[10];
    int issl=SSL_OFF;
    int nlink;
    int proto=AF_INET;
    pcontext;
    vsl[0]=0;
#ifdef HAVE_SSL
    if(strstr(newpeer(npeer)->server,"S=")==newpeer(npeer)->server)
    {
	issl=SSL_ON;
	ho=newpeer(npeer)->server+2;
	strcpy(vsl,"SSL-");
    } else
#endif
	ho=newpeer(npeer)->server;
    p_log(LOG_INFO,-1,lngtxt(558),
	 vsl,
         newpeer(npeer)->login,
	 datalink(rootlink)->name,
	 newpeer(npeer)->host,
	 newpeer(npeer)->lnkport,
	 ho,
	 newpeer(npeer)->port,
	 newpeer(npeer)->vhost);
    lkm=getpsocketbysock(newpeer(npeer)->insock);
    if(lkm!=NULL)
    {
	lkm->sock->flag=SOC_CONN;
	lkm->sock->param=npeer;
	lkm->sock->constructor=NULL;
	lkm->sock->constructed=NULL;
	lkm->sock->handler=checklinkdata;
	lkm->sock->errorhandler=errorrelaylink;
	lkm->sock->destructor=killrelaylink;
    }
    tmpsock=createsocket(0,ST_CONNECT,0,SGR_NONE,NULL,linkrelayconnected,errorrelaylink,checklinkdata,killrelaylink,linkrelayremap,proto,issl);
    tmpsock=connectto(tmpsock,ho,newpeer(npeer)->port,newpeer(npeer)->vhost);
    if (tmpsock!=0)
    {
	nlink=getnewlink();
	if (nlink==0) {
	    killsocket(tmpsock);
	    p_log(LOG_ERROR,-1,lngtxt(559));
	    return -1;
        }
        datalink(nlink)->type=LI_RELAY;
        datalink(nlink)->instate=STD_CONN;
        datalink(nlink)->insock=newpeer(npeer)->insock;
        strmncpy(datalink(nlink)->iam,newpeer(npeer)->nick,sizeof(datalink(nlink)->iam));
        strmncpy(datalink(nlink)->host,newpeer(npeer)->host,sizeof(datalink(nlink)->host));
        strmncpy(datalink(nlink)->pass,newpeer(npeer)->pass,sizeof(datalink(nlink)->pass));
        strmncpy(datalink(nlink)->name,newpeer(npeer)->name,sizeof(datalink(nlink)->name));
        datalink(nlink)->port=datalink(nlink)->port;
        datalink(nlink)->outstate=STD_CONN;
        datalink(nlink)->outsock=tmpsock;
	if(lkm) lkm->sock->param=nlink;
        lkm=getpsocketbysock(tmpsock);
        if(lkm!=NULL)
        {
    	    lkm->sock->flag=SOC_SYN;
    	    lkm->sock->param=nlink;
        }
	clearpeer(npeer);
	return 0x0;
    }
    p_log(LOG_ERROR,-1,lngtxt(560),newpeer(npeer)->server,newpeer(npeer)->port);
    killsocket(newpeer(npeer)->insock);
    return -1;
}
示例#30
0
文件: p_link.c 项目: gandaro/piebnc
int processlink(int nlink, int sock, int state)
{
    struct usernodes *th;
    struct linknodes *lh;
    int rc;
    char *pt,*pt2;
#ifdef PARTYCHANNEL
    int rr = 0;
    char buf[600] = "";
    char buf1[400] = "";
#endif
    char l;
    char o[]="->";
    char i[]="<-";
    char r[]="R ";
    char sic[500];
    int last;
    pcontext;
    if (state!=STD_CONN) return 0x0;
    parse();
    pcontext;
    if (!ifcommand("IAM") && !ifcommand(lngtxt(521))) broadcast(nlink); /* if its the IAM message, it does NOT
						get broadcasted */
    pcontext;
    pt=strchr(ircto,'@');
#ifdef PARTYCHANNEL
    if(pt==NULL) pt=strchr(ircto,'*');
#endif
    pcontext;
    if (pt!=NULL) 
    {
	*pt=0;
	pt++;
	if (strmcmp(pt,me)!=0 || (*ircto=='*' && strlen(pt)==1))
	{
	    pcontext;
	    if (ifcommand(lngtxt(522)))
	    {
		rc=checkuser(ircto);
		if (rc==0)
		{
		    ap_snprintf(ircbuf,sizeof(ircbuf),lngtxt(523),me,ircnick,irchost,ircto);
		    broadcast(0);	    
		    return 0x0;
		}
#ifdef PARTYCHANNEL
		ssnprintf(user(rc)->insock,lngtxt(524),ircnick,irchost,user(rc)->nick,irccontent);
#else
		ssnprintf(user(rc)->insock,lngtxt(525),ircnick,irchost,user(rc)->nick,irccontent);
#endif
		return 0x0;
	    }
	    pcontext;
	    if (ifcommand(lngtxt(526)))
	    {
		if(strstr(irccontent,o)!=NULL || strstr(irccontent,i)!=NULL) /* this is a listlink for the topology */
		{
		    pt=strchr(irccontent,'[');
		    if(pt!=NULL)
		    {
			pt++;
			pt2=strstr(pt,"]*");
			if(pt2!=NULL)
			{
			    *pt2=0;
			    strmncpy(sic,pt,sizeof(sic)); /* in sic we got the first linker */
			    pt2++;
			    pt=strstr(pt2,o);
			    if(pt==NULL) pt=strstr(pt2,i);
			    if(pt==NULL) return 0x0;		    
			    pt2=strchr(pt+3,' ');
			    if(pt2!=NULL)
			    {
				*pt2=0;
				if(strstr(pt,o)==pt)
				{
				    pt+=3;
				    addtopology(sic,pt);
				} else {
				    pt+=3;
				    addtopology(pt,sic);
				}
				return 0x0;
			    }
			}
		    }
		}
		pcontext;
#ifdef PARTYCHANNEL
		if(strstr(ircbuf,lngtxt(527))==ircbuf)
		{
		    if(*ircto=='*') /* systemrequest */
		    {
			pt=strchr(irccontent,']');
			if(pt!=NULL)
			{
			    pt+=2;
			    if(*pt=='*')
			    {
				pt2=strchr(pt,'(');
				if (pt2!=NULL)
				{
				    pt+=2;
				    *pt2=0;
				    ap_snprintf(buf,sizeof(buf),lngtxt(528),pt,irchost);
				    if(partyadd(buf)==1)
				    {
					ap_snprintf(buf1,sizeof(buf1),"%s%s\r\n",lngtxt(529),PARTYCHAN);
					ap_snprintf(buf,sizeof(buf),buf1,pt,irchost,pt,irchost);
					th=usernode;
					while(th!=NULL)
					{
					    rc=th->uid;
					    if(user(rc)->instate==STD_CONN && user(rc)->sysmsg==1 && user(rc)->parent==0)
					    {
						writesock(user(rc)->insock,buf);
					    }
					    th=th->next;
					}
					return 0x0;
				    }
				}
			    }
			}
		    }
		}
#endif
		rc=checkuser(ircto);
		if (rc!=0)
		{
		    ssnprintf(user(rc)->insock,lngtxt(530),ircnick,user(rc)->nick,irccontent);
		    return 0x0;
		}
	    }
	}
    }
    pcontext;
    if (ifcommand("IAM"))
    {
	if(*ircnick==0 || strchr(ircnick,' ')!=NULL || strchr(ircnick,'@')!=NULL || strchr(ircnick,'*')!=NULL)
	{
	    sysparty(lngtxt(531));
	    killsocket(sock);
	    datalink(nlink)->instate=STD_NOCON;
	    datalink(nlink)->outstate=STD_NOCON;
	    datalink(nlink)->insock=0;
	    datalink(nlink)->outsock=0;
	    clearlink(nlink);
	    eraselinkini(nlink);
	    return 0x0;
	}
	strmncpy(datalink(nlink)->iam,ircnick,sizeof(datalink(nlink)->iam));
	addtopology(me,datalink(nlink)->iam);
	writelink(nlink);
    }
    pcontext;
    if (ifcommand(lngtxt(532)))
    {
	if (strmcmp(me,ircto)!=0)
	{
	    p_log(LOG_ERROR,-1,lngtxt(533),
	      nlink,datalink(nlink)->host,datalink(nlink)->port);
	    killsocket(sock);
	    removetopology(me,datalink(nlink)->iam,lostlink);
	    datalink(nlink)->instate=STD_NOCON;
	    datalink(nlink)->outstate=STD_NOCON;
	    datalink(nlink)->insock=0;
	    datalink(nlink)->outsock=0;
	    clearlink(nlink);
	    eraselinkini(nlink);
	    return 0x0;	
	}
    }
    pcontext;
    if (ifcommand(lngtxt(534)))
    {
	th=usernode;
	while (th!=NULL) {
	    rc=th->uid;
	    if ((user(rc)->instate==STD_CONN && user(rc)->parent==0 && user(rc)->sysmsg==1) || rc==1)
	    {
		strmncpy(sic,irccontent,sizeof(sic));
#ifdef PARTYCHANNEL
		strmncpy(irccommand,lngtxt(535),sizeof(irccommand));
		strmncpy(ircto,PARTYCHAN,sizeof(ircto));
		if(strlen(ircto+1)<sizeof(ircto))
		    strcat(ircto," ");
#endif
		/* keeping being compatible with earlier versions requires this */
		if(strlen(ircnick)==6 && strstr(ircnick,lngtxt(536))==ircnick)
		{
#ifdef PARTYCHANNEL
		    if(strstr(irccontent,lngtxt(537))!=NULL)
		    {
			pt=strstr(irccontent,lngtxt(538));
			if(pt!=NULL)
			{
			    pt+=5;
			    pt2=strchr(pt,' ');
			    if (pt2!=NULL) *pt2=0;
			    strmncpy(ircnick,pt,sizeof(ircnick));
			    ap_snprintf(buf,sizeof(buf),lngtxt(539),pt,irchost);
			    strcpy(irccommand,"JOIN");
			    strmncpy(irccontent,PARTYCHAN,sizeof(irccontent));
			    *ircto=0;
			    if(rr==0) { partyadd(buf); rr=1; }
			}
		    }
		    if(strstr(irccontent,lngtxt(540))!=NULL)    
		    {
			pt=strstr(irccontent,lngtxt(541));
			if(pt!=NULL)
			{
			    pt+=5;
			    pt2=strchr(pt,' ');
			    if (pt2!=NULL) *pt2=0;
			    strmncpy(ircnick,pt,sizeof(ircnick));
			    ap_snprintf(buf,sizeof(buf),lngtxt(542),pt,irchost);
			    strcpy(irccommand,"PART");
			    strmncpy(irccontent,lngtxt(543),sizeof(irccontent));
			    if(rr==0) { partyremove(buf); rr=1; }
			}
		    }
#endif
		    if(strstr(irccontent,lngtxt(544))==irccontent)
		    {
			ap_snprintf(ircbuf,sizeof(ircbuf),lngtxt(545),me);
			broadcast(0);
			return 0x0;
		    }
		    if(strstr(irccontent,lngtxt(546))==irccontent)    
		    {
			pt=irccontent+11;
			pt2=strchr(pt,')');
			if(pt2!=NULL) *pt2=0;
			removetopology(irchost,pt,lostlink);
			if(pt2!=NULL) *pt2=')';
		    }
		}
#ifdef PARTYCHANNEL
		ap_snprintf(buf,sizeof(buf),lngtxt(547),
						    ircnick,irchost,ircnick,irchost,
						    irccommand,ircto,irccontent);
		if(user(rc)->instate==STD_CONN && user(rc)->parent==0 && user(rc)->sysmsg==1)
		    writesock(user(rc)->insock,buf);						    
#endif	
		ap_snprintf(irccontent,sizeof(irccontent),"%s",sic);
	    }
	    th=th->next;
	}	
	return 0x0;
    }
    pcontext;
    if (ifcommand("BWHO"))
    {
	th=usernode;
	while (th!=NULL) {
	    rc=th->uid;last=0;
	    if (user(rc)->instate!=STD_NOUSE)
	    {
	       if (user(rc)->parent != 0) l='^'; else { l='*';last=1; }
	       if (user(rc)->sysmsg == 0) l='+';
	       if (*user(rc)->host==0) l=' '; else last=0;
	       if(last==1)
      	           ap_snprintf(ircbuf,sizeof(ircbuf),lngtxt(548),me,ircnick,irchost,me,l,user(rc)->login,user(rc)->nick,user(rc)->network,user(rc)->server,user(rc)->user,user(rc)->last);
	       else	 
      	           ap_snprintf(ircbuf,sizeof(ircbuf),lngtxt(549),me,ircnick,irchost,me,l,user(rc)->login,user(rc)->nick,user(rc)->network,user(rc)->server,user(rc)->user);
	       broadcast(0);						    
	    }
	    th=th->next;
	}
	return 0x0;	
    }
    pcontext;
    if (ifcommand(lngtxt(550)))
    {
	lh=linknode;	
	while (lh!=NULL)
	{	
	    rc=lh->uid;
	    l=' ';
	    if (datalink(rc)->type!=0)
	    {
		if (datalink(rc)->type==LI_LINK) 
		{
		    pt=o;
		    if (datalink(rc)->outstate==STD_CONN) l='*';
		}
		if (datalink(rc)->type==LI_ALLOW) 
		{
		    if (datalink(rc)->instate==STD_CONN) l='*';
		    pt=i;
		}
		if (datalink(rc)->type==LI_RELAY) { pt=r; l='*';}
		ap_snprintf(ircbuf,sizeof(ircbuf),lngtxt(551),me,ircnick,irchost,me,l,rc,pt,datalink(rc)->iam,datalink(rc)->host,datalink(rc)->port); 
		broadcast(0);
	    }    
	    lh=lh->next;
	}
	return 0x0;
    }
    pcontext;
#ifdef PARTYCHANNEL
    if (ifcommand(lngtxt(552)))
    {
	strmncpy(partytopic,irccontent,sizeof(partytopic));
	th=usernode;
	while (th!=NULL) {
	    rc=th->uid;
	    if (user(rc)->instate==STD_CONN && user(rc)->parent==0)
	    {
	       ap_snprintf(buf1,sizeof(buf1),"%s%s%s",lngtxt(553),PARTYCHAN,lngtxt(554));
  	       ssnprintf(user(rc)->insock,buf1,
	                       ircnick,irchost,ircnick,irchost,irccontent);
	    }
	    th=th->next;
	}
    }
#endif
#ifdef INTNET
    if (ifcommand(lngtxt(555)))
    {
	pt=strchr(ircbuf,'\r');
	if(pt==NULL) pt=strchr(ircbuf,'\n');
	if(pt!=NULL) *pt=0;
	strmncpy(ircbuf,rtrim(irccontent),sizeof(ircbuf));
	internalinbound(0,nlink);
    }
#endif
    pcontext;
    return 0x0;
}