Skip to content

Commit 4e9fa52

Browse files
committed
RCX; encode keep.raw in aio->mode
1 parent 0705be3 commit 4e9fa52

File tree

4 files changed

+33
-31
lines changed

4 files changed

+33
-31
lines changed

R/nano.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ print.nanoStream <- function(x, ...) {
359359
#'
360360
print.recvAio <- function(x, ...) {
361361

362-
if (.subset2(x, "state"))
362+
if (length(x) > 2L)
363363
cat("< recvAio >\n - $raw for raw message\n - $data for message data\n", file = stdout())
364364
else
365365
cat("< recvAio >\n - $data for message data\n", file = stdout())
@@ -442,7 +442,7 @@ print.errorValue <- function(x, ...) {
442442
#' @export
443443
#'
444444
.DollarNames.recvAio <- function(x, pattern = "")
445-
grep(pattern, c(if (.subset2(x, "state")) "raw", "data"), value = TRUE, fixed = TRUE)
445+
grep(pattern, c(if (length(x) > 2L) "raw", "data"), value = TRUE, fixed = TRUE)
446446

447447
#' @export
448448
#'

R/ncurl.R

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ ncurl <- function(url,
7676
data = NULL,
7777
response = NULL,
7878
pem = NULL)
79-
if (async) {
80-
response
81-
context <- .Call(rnng_ncurl_aio, url, convert, method, headers, data, pem, environment())
82-
} else {
83-
.Call(rnng_ncurl, url, convert, follow, method, headers, data, response, pem)
84-
}
79+
if (async)
80+
data <- .Call(rnng_ncurl_aio, url, convert, method, headers, data, pem, environment()) else
81+
.Call(rnng_ncurl, url, convert, follow, method, headers, data, response, pem)
8582

src/aio.c

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ SEXP rnng_aio_get_msgraw(SEXP env) {
233233
return mk_error_raio(raio->result, env);
234234

235235
SEXP out;
236-
const int mod = raio->mode, kpr = 1;
236+
const int mod = -raio->mode, kpr = 1;
237237
unsigned char *buf;
238238
size_t sz;
239239

@@ -277,7 +277,14 @@ SEXP rnng_aio_get_msgdata(SEXP env) {
277277
return mk_error_raio(raio->result, env);
278278

279279
SEXP out;
280-
const int mod = raio->mode, kpr = LOGICAL(Rf_findVarInFrame(env, nano_StateSymbol))[0];
280+
int mod, kpr;
281+
if (raio->mode > 0) {
282+
mod = raio->mode;
283+
kpr = 0;
284+
} else {
285+
mod = -raio->mode;
286+
kpr = 1;
287+
}
281288
unsigned char *buf;
282289
size_t sz;
283290

@@ -541,7 +548,7 @@ SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP keep, SEXP bytes, SEX
541548
nano_aio *raio = R_Calloc(1, nano_aio);
542549

543550
raio->type = RECVAIO;
544-
raio->mode = nano_matcharg(mode);
551+
raio->mode = kpr ? -nano_matcharg(mode) : nano_matcharg(mode);
545552
raio->data = NULL;
546553

547554
if ((xc = nng_aio_alloc(&raio->aio, raio_complete, raio))) {
@@ -562,7 +569,7 @@ SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP keep, SEXP bytes, SEX
562569
nano_aio *raio = R_Calloc(1, nano_aio);
563570

564571
raio->type = RECVAIO;
565-
raio->mode = nano_matcharg(mode);
572+
raio->mode = kpr ? -nano_matcharg(mode) : nano_matcharg(mode);
566573
raio->data = NULL;
567574

568575
if ((xc = nng_aio_alloc(&raio->aio, raio_complete, raio))) {
@@ -585,7 +592,7 @@ SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP keep, SEXP bytes, SEX
585592
nng_iov *iov = R_Calloc(1, nng_iov);
586593

587594
iaio->type = IOV_RECVAIO;
588-
iaio->mode = nano_matchargs(mode);
595+
iaio->mode = kpr ? -nano_matchargs(mode) : nano_matchargs(mode);
589596
iaio->data = iov;
590597
iov->iov_len = xlen;
591598
iov->iov_buf = R_Calloc(xlen, unsigned char);
@@ -626,7 +633,6 @@ SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP keep, SEXP bytes, SEX
626633
REPROTECT(env = Rf_eval(env, clo), pxi);
627634
#endif
628635
Rf_defineVar(nano_AioSymbol, aio, env);
629-
Rf_defineVar(nano_StateSymbol, keep, env);
630636

631637
if (kpr) {
632638
PROTECT(fun = Rf_allocSExp(CLOSXP));
@@ -791,10 +797,10 @@ SEXP rnng_aio_http(SEXP env, SEXP response, SEXP which) {
791797
const int typ = INTEGER(which)[0];
792798
SEXP exist;
793799
switch (typ) {
794-
case 0: exist = Rf_findVarInFrame(ENCLOS(env), nano_StatusSymbol); break;
795-
case 1: exist = Rf_findVarInFrame(ENCLOS(env), nano_IdSymbol); break;
796-
case 2: exist = Rf_findVarInFrame(ENCLOS(env), nano_RawSymbol); break;
797-
default: exist = Rf_findVarInFrame(ENCLOS(env), nano_ProtocolSymbol); break;
800+
case 1: exist = Rf_findVarInFrame(ENCLOS(env), nano_StatusSymbol); break;
801+
case 2: exist = Rf_findVarInFrame(ENCLOS(env), nano_StateSymbol); break;
802+
case 3: exist = Rf_findVarInFrame(ENCLOS(env), nano_RawSymbol); break;
803+
default: exist = Rf_findVarInFrame(ENCLOS(env), nano_ResultSymbol); break;
798804
}
799805
if (exist != R_UnboundValue)
800806
return exist;
@@ -848,7 +854,7 @@ SEXP rnng_aio_http(SEXP env, SEXP response, SEXP which) {
848854
}
849855
UNPROTECT(1);
850856
}
851-
Rf_defineVar(nano_IdSymbol, rvec, ENCLOS(env));
857+
Rf_defineVar(nano_StateSymbol, rvec, ENCLOS(env));
852858

853859
nng_http_res_get_data(handle->res, &dat, &sz);
854860
vec = Rf_allocVector(RAWSXP, sz);
@@ -863,13 +869,13 @@ SEXP rnng_aio_http(SEXP env, SEXP response, SEXP which) {
863869
cvec = R_tryEvalSilent(cvec, R_BaseEnv, &xc);
864870
UNPROTECT(1);
865871
}
866-
Rf_defineVar(nano_ProtocolSymbol, cvec, ENCLOS(env));
872+
Rf_defineVar(nano_ResultSymbol, cvec, ENCLOS(env));
867873

868874
switch (typ) {
869-
case 0: out = Rf_findVarInFrame(ENCLOS(env), nano_StatusSymbol); break;
870-
case 1: out = Rf_findVarInFrame(ENCLOS(env), nano_IdSymbol); break;
871-
case 2: out = Rf_findVarInFrame(ENCLOS(env), nano_RawSymbol); break;
872-
default: out = Rf_findVarInFrame(ENCLOS(env), nano_ProtocolSymbol); break;
875+
case 1: out = Rf_findVarInFrame(ENCLOS(env), nano_StatusSymbol); break;
876+
case 2: out = Rf_findVarInFrame(ENCLOS(env), nano_StateSymbol); break;
877+
case 3: out = Rf_findVarInFrame(ENCLOS(env), nano_RawSymbol); break;
878+
default: out = Rf_findVarInFrame(ENCLOS(env), nano_ResultSymbol); break;
873879
}
874880
return out;
875881

@@ -918,7 +924,7 @@ SEXP rnng_request(SEXP con, SEXP data, SEXP sendmode, SEXP recvmode, SEXP timeou
918924
nano_aio *raio = R_Calloc(1, nano_aio);
919925

920926
raio->type = RECVAIO;
921-
raio->mode = nano_matcharg(recvmode);
927+
raio->mode = kpr ? -nano_matcharg(recvmode) : nano_matcharg(recvmode);
922928
raio->data = NULL;
923929

924930
if ((xc = nng_aio_alloc(&raio->aio, raio_complete, raio))) {
@@ -944,7 +950,6 @@ SEXP rnng_request(SEXP con, SEXP data, SEXP sendmode, SEXP recvmode, SEXP timeou
944950
PROTECT(sendaio = R_MakeExternalPtr(saio, R_NilValue, R_NilValue));
945951
R_RegisterCFinalizerEx(sendaio, saio_finalizer, TRUE);
946952
R_MakeWeakRef(aio, sendaio, R_NilValue, TRUE);
947-
Rf_defineVar(nano_StateSymbol, keep, env);
948953

949954
if (kpr) {
950955
PROTECT(fun = Rf_allocSExp(CLOSXP));

src/init.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,17 @@ static void RegisterSymbols(void) {
7777
}
7878

7979
static void PreserveObjects(void) {
80-
R_PreserveObject(nano_aioFormals = Rf_list1(Rf_install(".")));
80+
R_PreserveObject(nano_aioFormals = Rf_list1(nano_AioSymbol));
8181
R_PreserveObject(nano_aioFuncs = Rf_allocVector(LISTSXP, 3));
8282
SETCAR(nano_aioFuncs, Rf_lang3(nano_DotcallSymbol, Rf_install("rnng_aio_result"), nano_DataSymbol));
8383
SETCADR(nano_aioFuncs, Rf_lang3(nano_DotcallSymbol, Rf_install("rnng_aio_get_msgdata"), nano_ResultSymbol));
8484
SETCADDR(nano_aioFuncs, Rf_lang3(nano_DotcallSymbol, Rf_install("rnng_aio_get_msgraw"), nano_ResultSymbol));
8585
SEXP nano_AioHttpSymbol = Rf_install("rnng_aio_http");
8686
R_PreserveObject(nano_aioNFuncs = Rf_allocVector(LISTSXP, 4));
87-
SETCAR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_ContextSymbol, nano_ResponseSymbol, Rf_ScalarInteger(0)));
88-
SETCADR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_ContextSymbol, nano_ResponseSymbol, Rf_ScalarInteger(1)));
89-
SETCADDR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_ContextSymbol, nano_ResponseSymbol, Rf_ScalarInteger(2)));
90-
SETCADDDR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_ContextSymbol, nano_ResponseSymbol, Rf_ScalarInteger(3)));
87+
SETCAR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_DataSymbol, nano_ResponseSymbol, Rf_ScalarInteger(1)));
88+
SETCADR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_DataSymbol, nano_ResponseSymbol, Rf_ScalarInteger(2)));
89+
SETCADDR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_DataSymbol, nano_ResponseSymbol, Rf_ScalarInteger(3)));
90+
SETCADDDR(nano_aioNFuncs, Rf_lang5(nano_DotcallSymbol, nano_AioHttpSymbol, nano_DataSymbol, nano_ResponseSymbol, Rf_ScalarInteger(4)));
9191
R_PreserveObject(nano_error = Rf_mkString("errorValue"));
9292
R_PreserveObject(nano_ncurlAio = Rf_allocVector(STRSXP, 2));
9393
SET_STRING_ELT(nano_ncurlAio, 0, Rf_mkChar("ncurlAio"));

0 commit comments

Comments
 (0)