@@ -1200,49 +1200,39 @@ nc_ps_poll_session(struct nc_session *session, time_t now_mono, char *msg)
12001200#ifdef NC_ENABLED_SSH
12011201 case NC_TI_LIBSSH :
12021202 r = ssh_channel_poll_timeout (session -> ti .libssh .channel , 0 , 0 );
1203- if (r < 1 ) {
1204- if (r == SSH_EOF ) {
1205- sprintf (msg , "SSH channel unexpected EOF" );
1206- session -> status = NC_STATUS_INVALID ;
1207- session -> term_reason = NC_SESSION_TERM_DROPPED ;
1208- ret = NC_PSPOLL_SESSION_TERM | NC_PSPOLL_SESSION_ERROR ;
1209- } else if (r == SSH_ERROR ) {
1210- sprintf (msg , "SSH channel poll error (%s)" , ssh_get_error (session -> ti .libssh .session ));
1211- session -> status = NC_STATUS_INVALID ;
1212- session -> term_reason = NC_SESSION_TERM_OTHER ;
1213- ret = NC_PSPOLL_SESSION_TERM | NC_PSPOLL_SESSION_ERROR ;
1214- } else {
1215- ret = NC_PSPOLL_TIMEOUT ;
1216- }
1217- break ;
1218- }
1219-
1220- /* we have some data, but it may be just an SSH message */
1221- r = ssh_execute_message_callbacks (session -> ti .libssh .session );
1222- if (r != SSH_OK ) {
1223- sprintf (msg , "failed to receive SSH messages (%s)" , ssh_get_error (session -> ti .libssh .session ));
1203+ if (r == SSH_EOF ) {
1204+ sprintf (msg , "SSH channel unexpected EOF" );
1205+ session -> status = NC_STATUS_INVALID ;
1206+ session -> term_reason = NC_SESSION_TERM_DROPPED ;
1207+ ret = NC_PSPOLL_SESSION_TERM | NC_PSPOLL_SESSION_ERROR ;
1208+ } else if (r == SSH_ERROR ) {
1209+ sprintf (msg , "SSH channel poll error (%s)" , ssh_get_error (session -> ti .libssh .session ));
12241210 session -> status = NC_STATUS_INVALID ;
12251211 session -> term_reason = NC_SESSION_TERM_OTHER ;
12261212 ret = NC_PSPOLL_SESSION_TERM | NC_PSPOLL_SESSION_ERROR ;
1227- } else if (session -> flags & NC_SESSION_SSH_NEW_MSG ) {
1228- /* new SSH message */
1229- session -> flags &= ~NC_SESSION_SSH_NEW_MSG ;
1230- if (session -> ti .libssh .next ) {
1231- for (new = session -> ti .libssh .next ; new != session ; new = new -> ti .libssh .next ) {
1232- if ((new -> status == NC_STATUS_STARTING ) && new -> ti .libssh .channel
1233- && (new -> flags & NC_SESSION_SSH_SUBSYS_NETCONF )) {
1234- /* new NETCONF SSH channel */
1235- ret = NC_PSPOLL_SSH_CHANNEL ;
1213+ } else if (!r ) {
1214+ if (session -> flags & NC_SESSION_SSH_NEW_MSG ) {
1215+ /* new SSH message */
1216+ session -> flags &= ~NC_SESSION_SSH_NEW_MSG ;
1217+ if (session -> ti .libssh .next ) {
1218+ for (new = session -> ti .libssh .next ; new != session ; new = new -> ti .libssh .next ) {
1219+ if ((new -> status == NC_STATUS_STARTING ) && new -> ti .libssh .channel
1220+ && (new -> flags & NC_SESSION_SSH_SUBSYS_NETCONF )) {
1221+ /* new NETCONF SSH channel */
1222+ ret = NC_PSPOLL_SSH_CHANNEL ;
1223+ break ;
1224+ }
1225+ }
1226+ if (new != session ) {
12361227 break ;
12371228 }
12381229 }
1239- if (new != session ) {
1240- break ;
1241- }
1242- }
12431230
1244- /* just some SSH message */
1245- ret = NC_PSPOLL_SSH_MSG ;
1231+ /* just some SSH message */
1232+ ret = NC_PSPOLL_SSH_MSG ;
1233+ } else {
1234+ ret = NC_PSPOLL_TIMEOUT ;
1235+ }
12461236 } else {
12471237 /* we have some application data */
12481238 ret = NC_PSPOLL_RPC ;
0 commit comments