mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
move ast_carefulwrite from manager.c to utils.c so that cli.c and
res_agi.c no longer depend on manager.h (issue #6397, casper) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@25026 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
1
cli.c
1
cli.c
@@ -44,7 +44,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||||||
#include "asterisk/module.h"
|
#include "asterisk/module.h"
|
||||||
#include "asterisk/pbx.h"
|
#include "asterisk/pbx.h"
|
||||||
#include "asterisk/channel.h"
|
#include "asterisk/channel.h"
|
||||||
#include "asterisk/manager.h"
|
|
||||||
#include "asterisk/utils.h"
|
#include "asterisk/utils.h"
|
||||||
#include "asterisk/app.h"
|
#include "asterisk/app.h"
|
||||||
#include "asterisk/lock.h"
|
#include "asterisk/lock.h"
|
||||||
|
@@ -81,8 +81,6 @@ struct manager_action {
|
|||||||
struct manager_action *next;
|
struct manager_action *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
int ast_carefulwrite(int fd, char *s, int len, int timeoutms);
|
|
||||||
|
|
||||||
/* External routines may register/unregister manager callbacks this way */
|
/* External routines may register/unregister manager callbacks this way */
|
||||||
#define ast_manager_register(a, b, c, d) ast_manager_register2(a, b, c, d, NULL)
|
#define ast_manager_register(a, b, c, d) ast_manager_register2(a, b, c, d, NULL)
|
||||||
|
|
||||||
|
@@ -217,6 +217,17 @@ const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia);
|
|||||||
int ast_utils_init(void);
|
int ast_utils_init(void);
|
||||||
int ast_wait_for_input(int fd, int ms);
|
int ast_wait_for_input(int fd, int ms);
|
||||||
|
|
||||||
|
/*! ast_carefulwrite
|
||||||
|
\brief Try to write string, but wait no more than ms milliseconds
|
||||||
|
before timing out.
|
||||||
|
|
||||||
|
\note If you are calling ast_carefulwrite, it is assumed that you are calling
|
||||||
|
it on a file descriptor that _DOES_ have NONBLOCK set. This way,
|
||||||
|
there is only one system call made to do a write, unless we actually
|
||||||
|
have a need to wait. This way, we get better performance.
|
||||||
|
*/
|
||||||
|
int ast_carefulwrite(int fd, char *s, int len, int timeoutms);
|
||||||
|
|
||||||
/*! Compares the source address and port of two sockaddr_in */
|
/*! Compares the source address and port of two sockaddr_in */
|
||||||
static force_inline int inaddrcmp(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2)
|
static force_inline int inaddrcmp(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2)
|
||||||
{
|
{
|
||||||
|
32
manager.c
32
manager.c
@@ -168,38 +168,6 @@ static struct mansession {
|
|||||||
static struct manager_action *first_action = NULL;
|
static struct manager_action *first_action = NULL;
|
||||||
AST_MUTEX_DEFINE_STATIC(actionlock);
|
AST_MUTEX_DEFINE_STATIC(actionlock);
|
||||||
|
|
||||||
/*! If you are calling ast_carefulwrite, it is assumed that you are calling
|
|
||||||
it on a file descriptor that _DOES_ have NONBLOCK set. This way,
|
|
||||||
there is only one system call made to do a write, unless we actually
|
|
||||||
have a need to wait. This way, we get better performance. */
|
|
||||||
int ast_carefulwrite(int fd, char *s, int len, int timeoutms)
|
|
||||||
{
|
|
||||||
/* Try to write string, but wait no more than ms milliseconds
|
|
||||||
before timing out */
|
|
||||||
int res = 0;
|
|
||||||
struct pollfd fds[1];
|
|
||||||
while (len) {
|
|
||||||
res = write(fd, s, len);
|
|
||||||
if ((res < 0) && (errno != EAGAIN)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (res < 0)
|
|
||||||
res = 0;
|
|
||||||
len -= res;
|
|
||||||
s += res;
|
|
||||||
res = 0;
|
|
||||||
if (len) {
|
|
||||||
fds[0].fd = fd;
|
|
||||||
fds[0].events = POLLOUT;
|
|
||||||
/* Wait until writable again */
|
|
||||||
res = poll(fds, 1, timeoutms);
|
|
||||||
if (res < 1)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! authority_to_str: Convert authority code to string with serveral options */
|
/*! authority_to_str: Convert authority code to string with serveral options */
|
||||||
static char *authority_to_str(int authority, char *res, int reslen)
|
static char *authority_to_str(int authority, char *res, int reslen)
|
||||||
{
|
{
|
||||||
|
@@ -59,7 +59,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||||||
#include "asterisk/app.h"
|
#include "asterisk/app.h"
|
||||||
#include "asterisk/dsp.h"
|
#include "asterisk/dsp.h"
|
||||||
#include "asterisk/musiconhold.h"
|
#include "asterisk/musiconhold.h"
|
||||||
#include "asterisk/manager.h"
|
|
||||||
#include "asterisk/utils.h"
|
#include "asterisk/utils.h"
|
||||||
#include "asterisk/lock.h"
|
#include "asterisk/lock.h"
|
||||||
#include "asterisk/strings.h"
|
#include "asterisk/strings.h"
|
||||||
|
28
utils.c
28
utils.c
@@ -591,6 +591,34 @@ int ast_wait_for_input(int fd, int ms)
|
|||||||
return poll(pfd, 1, ms);
|
return poll(pfd, 1, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ast_carefulwrite(int fd, char *s, int len, int timeoutms)
|
||||||
|
{
|
||||||
|
/* Try to write string, but wait no more than ms milliseconds
|
||||||
|
before timing out */
|
||||||
|
int res = 0;
|
||||||
|
struct pollfd fds[1];
|
||||||
|
while (len) {
|
||||||
|
res = write(fd, s, len);
|
||||||
|
if ((res < 0) && (errno != EAGAIN)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (res < 0)
|
||||||
|
res = 0;
|
||||||
|
len -= res;
|
||||||
|
s += res;
|
||||||
|
res = 0;
|
||||||
|
if (len) {
|
||||||
|
fds[0].fd = fd;
|
||||||
|
fds[0].events = POLLOUT;
|
||||||
|
/* Wait until writable again */
|
||||||
|
res = poll(fds, 1, timeoutms);
|
||||||
|
if (res < 1)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
|
char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
|
||||||
{
|
{
|
||||||
char *e;
|
char *e;
|
||||||
|
Reference in New Issue
Block a user