Class: LibSSH::Scp
- Inherits:
-
Object
- Object
- LibSSH::Scp
- Defined in:
- ext/libssh_ruby/scp.c
Constant Summary collapse
- REQUEST_NEWFILE =
INT2FIX(SSH_SCP_REQUEST_NEWFILE)
- REQUEST_NEWDIR =
INT2FIX(SSH_SCP_REQUEST_NEWDIR)
- REQUEST_ENDDIR =
INT2FIX(SSH_SCP_REQUEST_ENDDIR)
- REQUEST_WARNING =
INT2FIX(SSH_SCP_REQUEST_WARNING)
- REQUEST_EOF =
INT2FIX(SSH_SCP_REQUEST_EOF)
Instance Method Summary collapse
-
#accept_request ⇒ nil
Accepts transfer of a file or creation of a directory coming from the remote party.
-
#close ⇒ nil
Close the scp channel.
-
#deny_request ⇒ nil
Deny the transfer of a file or creation of a directory coming from the remote party.
-
#init {|scp| ... } ⇒ Object
Initialize the scp channel.
-
#initialize(session, mode, path) ⇒ Scp
constructor
Create a new scp session.
-
#pull_request ⇒ Fixnum
Wait for a scp request.
-
#push_file(filename, size, mode) ⇒ nil
Initialize the sending of a file to a scp in sink mode.
-
#read(size) ⇒ String
Read from a remote scp file.
-
#request_filename ⇒ String?
Get the name of the directory or file being pushed from the other party.
-
#request_permissions ⇒ Fixnum
Get the permissions of the directory or file being pushed from the other party.
-
#request_size ⇒ Integer
Get the size of the file being pushed from the other party.
-
#request_warning ⇒ String?
Get the warning string.
-
#write(data) ⇒ nil
Write into a remote scp file.
Constructor Details
#initialize(session, mode, path) ⇒ Scp
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'ext/libssh_ruby/scp.c', line 64 static VALUE m_initialize(VALUE self, VALUE session, VALUE mode, VALUE path) { ScpHolder *holder; SessionHolder *session_holder; char *c_path; ID id_mode; int c_mode; Check_Type(mode, T_SYMBOL); id_mode = SYM2ID(mode); if (id_mode == id_read) { c_mode = SSH_SCP_READ; } else if (id_mode == id_write) { c_mode = SSH_SCP_WRITE; } else { rb_raise(rb_eArgError, "Invalid mode value: %" PRIsVALUE, mode); } c_path = StringValueCStr(path); TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); session_holder = libssh_ruby_session_holder(session); holder->scp = ssh_scp_new(session_holder->session, c_mode, c_path); holder->session = session; return self; } |
Instance Method Details
#accept_request ⇒ nil
313 314 315 316 317 318 319 320 321 322 |
# File 'ext/libssh_ruby/scp.c', line 313 static VALUE m_accept_request(VALUE self) { ScpHolder *holder; struct nogvl_scp_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); args.scp = holder->scp; rb_thread_call_without_gvl(nogvl_accept_request, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return Qnil; } |
#close ⇒ nil
106 107 108 109 110 111 112 113 114 115 116 |
# File 'ext/libssh_ruby/scp.c', line 106 static VALUE m_close(VALUE self) { ScpHolder *holder; struct nogvl_scp_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); args.scp = holder->scp; rb_thread_call_without_gvl(nogvl_close, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return Qnil; } |
#deny_request ⇒ nil
344 345 346 347 348 349 350 351 352 353 354 |
# File 'ext/libssh_ruby/scp.c', line 344 static VALUE m_deny_request(VALUE self, VALUE reason) { ScpHolder *holder; struct nogvl_deny_request_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); args.scp = holder->scp; args.reason = StringValueCStr(reason); rb_thread_call_without_gvl(nogvl_deny_request, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return Qnil; } |
#init {|scp| ... } ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 |
# File 'ext/libssh_ruby/scp.c', line 131 static VALUE m_init(VALUE self) { ScpHolder *holder; struct nogvl_scp_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); args.scp = holder->scp; rb_thread_call_without_gvl(nogvl_init, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return rb_ensure(rb_yield, Qnil, m_close, self); } |
#pull_request ⇒ Fixnum
234 235 236 237 238 239 240 241 242 243 |
# File 'ext/libssh_ruby/scp.c', line 234 static VALUE m_pull_request(VALUE self) { ScpHolder *holder; struct nogvl_scp_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); args.scp = holder->scp; rb_thread_call_without_gvl(nogvl_pull_request, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return INT2FIX(args.rc); } |
#push_file(filename, size, mode) ⇒ nil
168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'ext/libssh_ruby/scp.c', line 168 static VALUE m_push_file(VALUE self, VALUE filename, VALUE size, VALUE mode) { ScpHolder *holder; struct nogvl_push_file_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); args.scp = holder->scp; args.filename = StringValueCStr(filename); args.size = NUM2ULONG(size); args.mode = FIX2INT(mode); rb_thread_call_without_gvl(nogvl_push_file, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return Qnil; } |
#read(size) ⇒ String
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
# File 'ext/libssh_ruby/scp.c', line 376 static VALUE m_read(VALUE self, VALUE size) { ScpHolder *holder; struct nogvl_read_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); Check_Type(size, T_FIXNUM); args.scp = holder->scp; args.size = FIX2INT(size); args.buffer = ALLOC_N(char, args.size); rb_thread_call_without_gvl(nogvl_read, &args, RUBY_UBF_IO, NULL); if (args.rc == SSH_ERROR) { ruby_xfree(args.buffer); RAISE_IF_ERROR(args.rc); return Qnil; /* unreachable */ } else { VALUE ret = rb_utf8_str_new(args.buffer, args.rc); ruby_xfree(args.buffer); return ret; } } |
#request_filename ⇒ String?
268 269 270 271 272 273 274 275 276 277 278 279 |
# File 'ext/libssh_ruby/scp.c', line 268 static VALUE m_request_filename(VALUE self) { ScpHolder *holder; const char *filename; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); filename = ssh_scp_request_get_filename(holder->scp); if (filename == NULL) { return Qnil; } else { return rb_str_new_cstr(filename); } } |
#request_permissions ⇒ Fixnum
289 290 291 292 293 294 295 296 297 |
# File 'ext/libssh_ruby/scp.c', line 289 static VALUE (VALUE self) { ScpHolder *holder; int mode; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); mode = (holder->scp); RAISE_IF_ERROR(mode); return INT2FIX(mode); } |
#request_size ⇒ Integer
252 253 254 255 256 257 258 259 |
# File 'ext/libssh_ruby/scp.c', line 252 static VALUE m_request_size(VALUE self) { ScpHolder *holder; uint64_t size; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); size = ssh_scp_request_get_size64(holder->scp); return ULL2NUM(size); } |
#request_warning ⇒ String?
404 405 406 407 408 409 410 411 412 413 414 415 |
# File 'ext/libssh_ruby/scp.c', line 404 static VALUE m_request_warning(VALUE self) { ScpHolder *holder; const char *warning; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); warning = ssh_scp_request_get_warning(holder->scp); if (warning == NULL) { return Qnil; } else { return rb_str_new_cstr(warning); } } |
#write(data) ⇒ nil
202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'ext/libssh_ruby/scp.c', line 202 static VALUE m_write(VALUE self, VALUE data) { ScpHolder *holder; struct nogvl_write_args args; TypedData_Get_Struct(self, ScpHolder, &scp_type, holder); Check_Type(data, T_STRING); args.scp = holder->scp; args.buffer = RSTRING_PTR(data); args.len = RSTRING_LEN(data); rb_thread_call_without_gvl(nogvl_write, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return Qnil; } |