blob: d13ae10212684333f77f2a2e3602e7b56be67db7 [file] [log] [blame]
/*
* 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 <guacamole/client.h>
#include <guacamole/parser.h>
#include <unistd.h>
/**
* 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