| /****************************************************************************** |
| * Copyright (c) 2005 The Regents of the University of California. |
| * This material was produced under U.S. Government contract W-7405-ENG-36 |
| * for Los Alamos National Laboratory, which is operated by the University |
| * of California for the U.S. Department of Energy. The U.S. Government has |
| * rights to use, reproduce, and distribute this software. NEITHER THE |
| * GOVERNMENT NOR THE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR |
| * ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified |
| * to produce derivative works, such modified software should be clearly |
| * marked, so as not to confuse it with the version available from LANL. |
| * |
| * Additionally, this program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * LA-CC 04-115 |
| ******************************************************************************/ |
| |
| /* |
| * Miscellaneous proxy functions. |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "proxy.h" |
| #include "proxy_tcp.h" |
| |
| proxy proxies[] = { |
| {"tcp", NULL, &proxy_tcp_clnt_funcs, NULL}, |
| {NULL, NULL, NULL, NULL} |
| }; |
| |
| int |
| proxy_clnt_init(char *name, struct timeval *timeout, proxy_clnt_helper_funcs *cf, proxy_clnt **clnt, char *attr, va_list ap) |
| { |
| proxy * p; |
| proxy_clnt * pc; |
| void * data; |
| |
| if (find_proxy(name, &p) < 0) |
| return PROXY_RES_ERR; |
| |
| pc = (proxy_clnt *)malloc(sizeof(proxy_clnt)); |
| pc->proxy = p; |
| pc->clnt_helper_funcs = cf; |
| pc->clnt_timeout = NULL; |
| |
| if (timeout != NULL) { |
| pc->clnt_timeout = (struct timeval *)malloc(sizeof(struct timeval)); |
| memcpy(pc->clnt_timeout, timeout, sizeof(struct timeval)); |
| } |
| |
| if (p->clnt_funcs->init(pc, &data, attr, ap) < 0) { |
| free(pc); |
| return PROXY_RES_ERR; |
| } |
| |
| pc->clnt_data = data; |
| pc->clnt_events = NewList(); |
| |
| *clnt = pc; |
| |
| return PROXY_RES_OK; |
| } |
| |
| int |
| proxy_clnt_connect(proxy_clnt *pc) |
| { |
| if (pc != NULL) |
| return pc->proxy->clnt_funcs->connect(pc); |
| |
| return PROXY_RES_ERR; |
| } |
| |
| int |
| proxy_clnt_create(proxy_clnt *pc) |
| { |
| if (pc != NULL) |
| return pc->proxy->clnt_funcs->create(pc); |
| |
| return PROXY_RES_ERR; |
| } |
| |
| int |
| proxy_clnt_progress(proxy_clnt *pc) |
| { |
| if (pc != NULL) |
| return pc->proxy->clnt_funcs->progress(pc); |
| |
| return PROXY_RES_ERR; |
| } |
| |
| void |
| proxy_clnt_queue_msg(proxy_clnt *pc, proxy_msg *m) |
| { |
| proxy_queue_msg(pc->clnt_events, m); |
| } |
| |