/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef GUACD_PROC_H #define GUACD_PROC_H #include "config.h" #include #include #include /** * The number of milliseconds to wait for messages in any phase before * timing out and closing the connection with an error. */ #define GUACD_TIMEOUT 15000 /** * The number of microseconds to wait for messages in any phase before * timing out and closing the conncetion with an error. This is always * equal to GUACD_TIMEOUT * 1000. */ #define GUACD_USEC_TIMEOUT (GUACD_TIMEOUT*1000) /** * The number of seconds to wait for any particular guac_client instance * to be freed following disconnect. If the free operation does not complete * within this period of time, the associated process will be forcibly * terminated. */ #define GUACD_CLIENT_FREE_TIMEOUT 5 /** * Process information of the internal remote desktop client. */ typedef struct guacd_proc { /** * The process ID of the client. This will only be available to the * parent process. The child process will see this as 0. */ pid_t pid; /** * The file descriptor of the UNIX domain socket to use for sending and * receiving file descriptors of new users. This parent will see this * as the file descriptor for communicating with the child and vice * versa. */ int fd_socket; /** * The actual client instance. This will be visible to both child and * parent process, but only the child will have a full guac_client * instance, containing handlers from the plugin, etc. * * The parent process will receive a skeleton guac_client, containing only * a proper connection_id and logging handlers. The actual * protocol-specific handling will be absent. */ guac_client* client; } guacd_proc; /** * Creates a new background process for handling the given protocol, returning * a structure allowing communication with and monitoring of the process * created. Within the child process, this function does not return - the * entire child process simply terminates instead. * * @param protocol * The protocol for which this process is client being created. * * @return * A newly-allocated process structure pointing to the file descriptor of * the background process specific to the specified protocol, or NULL of * the process could not be created. */ guacd_proc* guacd_create_proc(const char* protocol); /** * Signals the given process to stop accepting new users and clean up. This * will eventually cause the child process to exit. * * @param proc * The process to stop. */ void guacd_proc_stop(guacd_proc* proc); #endif